使用jQuery选择HTML注释

时间:2009-10-26 08:53:52

标签: jquery html

有没有人知道如何用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>

这不会发表评论。

4 个答案:

答案 0 :(得分:114)

这似乎与你正在寻找的东西相当:

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

答案 1 :(得分:12)

jQuery comments() plugin会为你做这件事。用法:

var comments = $( "#foo" ).comments();
alert(comments.html());

答案 2 :(得分:12)

如果您不想要插件:

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

这使用正则表达式。设置为搜索<!---->所包含的任何内容,而内部写的内容无关紧要。

注意:我不确定,jQuery是否也会返回评论。如果没有,这种方法不起作用。

答案 3 :(得分: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]);
}

再次,在游戏后期道歉,但我认为提供另一种解决此问题的方法并没有什么坏处。