3

コンソールを使用してフレームセットタグで要素を作成しようとすると、結果が得られません:

$('<div id="content" data-something="hello" />')
=> [<div id=​"content" data-something=​"hello">​&lt;/div>​]
$('<frameset frameborder="0" framespacing="0" marginwidth="0" marginheight="0" framespacing="0" border="0"></frameset>')
=> []

この動作は、複数の JQuery バージョン (1.10.2、2.0.0、1.2.6 など) で持続します。

自分でパーサーを構築することなく、このフレームセットから「frameborder」(たとえば)属性を読み取るにはどうすればよいですか?

PS (なぜフレームを使用するのか疑問に思われる場合) この行 (またはこのような行) は、変更できない外部 (多かれ少なかれ) API からの応答です。情報を読んで続けたいと思います。

4

3 に答える 3

1

このframesetタグは、フレーム化されたドキュメントの本文としてタグの代わりに使用され、bodyframesetドキュメント タイプ宣言と組み合わせて使用​​されます。HTML5 以来、廃止されたと考えられています。


問題を解決するには、文字列から必要な部分を独自に解析するか、htmlparser.jsなどの HTML 解析ライブラリを使用することをお勧めします。

于 2013-11-05T18:14:42.497 に答える
0

私は回避策を使用しました:

var sourceWithFrames = ...
sourceWithFrames = sourceWithFrames.replace(/<frame/g, '<xyzFrame')
// e.g. 
var frameborder = $(sourceWithFrames).find('xyzFrameset').attr('frameborder')
// and so on

私の意見では、これがこれにアプローチする最良の方法です (そしておそらく唯一の方法です...)

于 2013-11-06T23:39:23.710 に答える
0

frameset 要素の属性は有効な HTML ではないため、jQuery はそれを作成しません。それらを取り出せばうまくいきます。その後、 を使用して属性を 1 つずつ追加できます.attr

var x = $('<frameset></frameset>');
x.attr('frameborder', '0');
x.attr('framespacing', '0');
x.attr('border', '0');  

ただし、要素を作成するための追加のコードとリソース コストは、文字列内の属性値を見つけるためだけに必要なわけではありません。次のような match メソッドを使用して、探している部分文字列を見つけることができます。

var frameborder = '<frameset frameborder="0" border="0"></frameset>'.match(/frameborder="(.+?)"/)[1]

正規表現の「frameborder」を別の属性の名前に置き換えるだけで、その値を取得できます。単純。

于 2013-11-05T18:32:16.030 に答える