0

次の問題が発生しています:http://jsfiddle.net/x55LD/1/

jQuery1.6を使用してカスタムタグを解析しようとしています。タグがタグ内にある場合を除いて、正しく機能しています<select>。例えば:

var string = '<div><blah></blah><select><blah></blah></select></div>';

$(string).find('blah').each(function() {
    console.log("Found tag!");
});

<blah>これは、2つのタグが存在するにもかかわらず、1つのメッセージのみをログに記録します。内の2番目の<blah>タグは<select>認識されません。なぜこれが起こっているのか誰かが知っていますか?

4

2 に答える 2

2

無効なHTMLを使用する代わりに、カスタム属性を使用してタグにマークを付けたり、代わりにデータを保存したりします。

<div><span blah></span><select blah></select></div>

次に、属性セレクターを使用できます。

$('[blah]')...

のようなHTML5スタイル属性data-something="my data"を使用し$.dataて、値を直接取得することもできます。

非標準のタグの内容はおそらくとにかくレンダリングされるだけなので、カスタム属性を持つスパンタグを使用する場合と同じようにレンダリングすることに違いはありません。オプショングループ内のカスタムタグを使用して正確に何を達成しようとしているのかわかりませんが、レンダリングしたくないと思うので、選択または特定のオプションのカスタムタグで達成できる可能性がありますあなたの目標。

于 2011-05-24T15:11:53.827 に答える
2

問題は、解析を行うのは JavaScript や jQuery ではなく、ブラウザーであることです。そのタグを独自のカスタムディールと見なすこともできますが、ブラウザーは同意せず、またはタグ<select>のみが含まれていることを期待します。<option><optgroup>

このように jQuery を介して文字列をラップすると、内部で何が起こっているかというと、jQuery が文字列を一時要素の「innerHTML」としてブラウザーに渡しているということです。ブラウザーは、動作する HTML があることを期待しているため、違法なマークアップを見つけた場合、基本的には好きなように処理します。<blah>タグをそのままにしておくブラウザもあれば、そうしないブラウザもあります。

于 2011-05-24T14:54:14.133 に答える