有没有人知道如何用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>
这不会发表评论。
答案 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]);
}
再次,在游戏后期道歉,但我认为提供另一种解决此问题的方法并没有什么坏处。