使用jQuery选择HTML注释


69

有谁知道如何使用jQuery选择HTML注释节点?

<html>
<head>
    <title>Check Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
            $("body *").each(function() {
                alert($(this).wrap("<span />").parent().html());
            });
        });
    </script>
</head>
<body>
    <!-- Hello -->  
    <p>
        <label for="thing">Thing Label</label>
        <input id="thing" type="checkbox" />
    </p>

这不会引起评论。


我认为您标记的答案不是最好的。这是标记具有更多投票权的第二个答案的好主意。
穆罕默德

Answers:



116

这似乎与您正在寻找的东西等效:

    $(function() {
        $("body").contents().filter(function(){
            return this.nodeType == 8;
        }).each(function(i, e){
            alert(e.nodeValue);
        });
    });

28
这种方法并不总是有效,但是它可以:$("*").contents().filter(function(){ return this.nodeType == 8;})
Ivan Castellanos

8
@OskarAustegard-缺少一些可工作的代码。固定:jsfiddle.net/zM5se/58
Jason Kleban

是的,您是对的,不确定该如何运作。也许我输入了错误的链接-这个片段有58个版本...
Oskar Austegard 2012年


这对我不起作用。我正在尝试检测<!--readmore-->评论,但没有收到任何评论。
Ejaz 2015年

13

如果您不希望使用插件,请执行以下操作:

var content = jQuery('body').html();
alert(content.match(/<!--.*?-->/g));

这使用正则表达式。它设置为搜索由括起来的内容<!---->而无论内部写什么都无所谓。

注意:但是,我不确定jQuery是否还会返回注释。如果不是,则此方法无效。


2
它返回的意见,所以上述作品,感谢您的建议
安东尼约翰斯顿

1
实际上,再看一遍,使用jquery进行任何有用的操作(例如document.body.innerHTML == jQuery('body')。html())并不是真正的事情,正则表达式的功能比这里建议的要多...再次考虑,谢谢无论如何,迈克
安东尼·约翰斯顿,

1
尽管如此,该聚会仍对正则表达式表示赞赏。
13年

这不会选择实际的注释节点。它只会告诉您它们是否在那里。
克里斯·卡洛

5
此正则表达式仅适用于单行注释。要同时处理跨越行的注释,请改用此正则表达式:/ <!-[\ s \ S] *?-> / g
sethpollack

6

再一次,我在比赛中很晚,但是我认为我应该做出贡献,因为我发现这篇文章对我最近遇到的情况很有帮助。

在我们的上下文中,我们有一个广告服务,提供代码块以呈现广告。

每个广告都有唯一的“航班ID”。表示同一个250x300侧栏广告可以有多个排期。因此,您可能会看到一则有关Subway,刷新和Quizno的广告。

不幸的是,该服务在注释中提供了该航班ID,而不是像数据属性这样有用的东西。也就是说,每个评论都在标签内。

从上面的内容,我可以利用RegExp对象的JavaScript的exec()方法,将此解决方案组合在一起,以在注释中获取航班号:

regexComment = new RegExp(/<!--\s*ad flight id:\s*([0-9]+)\s*-->/i);
targetElement = regexComment.exec($('div.advertisement').html());
if(targetElement.length > 0) {
    return parseInt(targetElement[1]);
}

再次道歉,不过比赛后期,但我认为为该问题提供另一种方法也没有什么坏处。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.