2011-11-22 13 views
8

私はいつもjQueryはDOM の要素、つまりnodeType == 1のノードでしか動作しないと思っていました。関数にこの方法を作成し、どこかに渡されたjQueryはどのようにコメント要素を扱いますか?

[p, Comment { data=" comment ", length=21, nodeName="#comment", more...}](Firebugのフォーマット)

私はAJAXおよびDOMコメントによっていくつかのHTMLを受け入れ:私はHTMLを作成中で$("<p> </p><!-- comment -->")結果があることにショックを受けてるしかし

これは要素にのみ適用されます:defaultView.getComputedStyle(elem, null)

いくつかのクリーンな方法がありますか?

答えて

5

私は常にjQueryのだけ DOM要素を選択するだけでDOM要素

そのセレクタに動作することを考えました。あなたの場合、あなたが提供したHTML文字列からノードを作成しています。そのため、jQueryは文字列を解析し、求めているノードを返します。

クリーニングするには、.filter()を実行してください。

var els = $("<p> </p><!-- comment -->").filter(function() { 
                return this.nodeType === 1; 
               }); 
+0

説明のために受け入れられました。 – tillda

+0

@tillda:ちょうどちょうど、ちょうどちょっとでも、直接の 'this.nodeType === 1'テストでは、' '* ''セレクタを実行するよりも速い操作ですが、小さなセットでは目立った違いはありません。 – RightSaidFred

5

まあ、興味深い問題です。ちょっと手を出した後、私はあなたがuniversal selector*)の.filterを使ってそれらを取り除くことができることを知りました。

var a = $("<p></p><!-- comment -->"); 
console.log(a); 
console.log(a.filter("*")); 
関連する問題