2011-11-22 126 views
8

我一直認爲jQuery只能在DOM 元素上運行,也就是那些有nodeType == 1的節點。jQuery如何處理註釋元素?

但我感到震驚的是,雖然創建HTML $("<p> </p><!-- comment -->")結果:

[p, Comment { data=" comment ", length=21, nodeName="#comment", more...}](螢火蟲格式)

我接受了AJAX和DOM評論一些HTML創建這樣的,地方傳遞給函數這隻適用於元素: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:只是FYI,直接執行'this.nodeType === 1'測試的速度比運行''*「'選擇器的速度快,儘管只有一個小選擇,但它不會產生顯着差異。 – RightSaidFred

5

嗯,一個有趣的問題。在擺弄了一下之後,我發現你可以用.filteruniversal selector*)將它們刪除。

var a = $("<p></p><!-- comment -->"); 
console.log(a); 
console.log(a.filter("*"));