2011-11-22 80 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("*"));