jQuery 如何处理评论元素?

Posted

技术标签:

【中文标题】jQuery 如何处理评论元素?【英文标题】:How does jQuery treat comment elements? 【发布时间】:2012-01-03 23:18:15 【问题描述】:

我一直以为jQuery只对DOM元素进行操作,也就是那些有nodeType == 1的节点。

但我很震惊,在创建 html $("<p> </p><!-- comment -->") 时会导致:

[p, Comment data=" comment ", length=21, nodeName="#comment", more...](萤火虫格式)

我通过 AJAX 接受了一些 HTML,并以这种方式创建了一个 DOM 注释,并将某处传递给仅适用于元素的函数:defaultView.getComputedStyle( elem, null )

有什么干净的方法可以解决吗?

【问题讨论】:

【参考方案1】:

我一直认为 jQuery 只对 DOM 元素进行操作

它的选择器只有 select DOM 元素。在您的情况下,您正在从您提供的 HTML 字符串创建节点。因此 jQuery 会解析字符串并返回您所要求的节点。

要清理它,请发送.filter()

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

【讨论】:

接受解释。 @tillda:仅供参考,使用直接this.nodeType === 1 测试也比运行"*" 选择器更快,尽管使用较小的集合,它不会产生明显的差异。 【参考方案2】:

嗯,一个有趣的问题。经过一番摆弄,我发现您可以使用 .filter 和 universal selector (*) 删除它们。

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

【讨论】:

以上是关于jQuery 如何处理评论元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理(离子选择)OK按钮?

如何处理点击子元素

如何处理覆盖固定元素的Android键盘?

PHP如何处理一个引用自身作为元素的数组?

unordered_map<int,int> 如何处理负面元素?

Android - 如何处理单个 ListViewItem 中的多个元素?