使用javascript取消对html代码的注释
带有一些注释标记的Html表。我只是想取消那些标签的注释。我尝试过使用javascript的正则表达式,但问题是它删除了整个注释行,因为我只想取消注释这些标记。下面是带有注释标记的示例html表使用javascript取消对html代码的注释,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,带有一些注释标记的Html表。我只是想取消那些标签的注释。我尝试过使用javascript的正则表达式,但问题是它删除了整个注释行,因为我只想取消注释这些标记。下面是带有注释标记的示例html表 <table> <tr> <td>ABCD</td> <td>Logic</td> <!-- <td>26538568</td> -->
<table>
<tr>
<td>ABCD</td>
<td>Logic</td>
<!-- <td>26538568</td> -->
</tr>
</table>
ABCD
逻辑
所以在上面的代码中,我只想取消注释
。
请注意,这是从网页抓取数据的一部分,所以我不能更改html代码。上面提到的表结构类似于我试图从中提取数据的网页。因此您需要查找并替换,例如:
$("body").html($("body").html().replace('<!--', '<!--'));
$(“body”).html($((“body”).html().replace(“不是您正在使用的正确方法,最好通过隐藏行来隐藏行,并使用show方法使用javascript在屏幕上显示行。
这是正确的代码:
<table>
<tr>
<td>ABCD<td>
<td>Logic<td>
<td class='td_hide'>26538568<td>
</tr>
</table>
<style>
.td_hide{
display:none;
}
</style>
如果你愿意,你可以这样做
<script>
jQuery('td.#hide').show();
</script>
<table>
<tr>
<td>ABCD<td>
<td>Logic<td>
<td id='hide' style="display:none">26538568<td>
</tr>
</table>
jQuery('td.#hide').show();
ABCD
逻辑
26538568
因此,在这里最初它们td元素将被隐藏,因此如果您想调用add函数并添加上面的jquery以取消隐藏它。您可以通过使用DOM来完成,而不将文档视为文本。例如,使用jquery:
$('table tr')
.contents()
.filter(function(){return this.nodeType === 8;}) //get the comments
.replaceWith(function(){return this.data;})
这里有趣的一点是,它返回所有节点,而不仅仅是元素——这包括文本节点和注释
工作示例:
注意:我不确定跨浏览器是如何做到这一点的。具体来说,它可能是节点。数据不受支持。我已经在Firefox、Chrome和IE 10中测试了这段代码。有一个非常有用的小jquery插件正是这样做的。我没有编写它,但它是开源的,下面是代码和原始sourc的属性e:
在我们的网站上运行良好
Javascript是:
(function ($) {
$.fn.uncomment = function () {
for (var i = 0, l = this.length; i < l; i++) {
for (var j = 0, len = this[i].childNodes.length; j < len; j++) {
if (this[i].childNodes[j].nodeType === 8) {
var content = this[i].childNodes[j].nodeValue;
$(this[i].childNodes[j]).replaceWith(content);
}
}
}
};
})(jQuery);
我们使用它来延迟/排除一些移动用户的图片库,以加快页面加载
skinny.js.的一部分,您可以在这里找到:
为什么要这样做?如果只是为了隐藏/显示HTML,还有更好的时间来做…不妨隐藏它。然后做一些动作并显示出来。基本上,我正在尝试从带有注释的表格的网页中刮取数据。@Kobi yep,对不起,标签应该关闭!谢谢注意。最好替换是的@BastiM我只想取消注释那些被注释的行。@BastiM如果我没有错的话,这只会在的第一次出现时执行。我知道这不是正确的方法,但我正试图从网页的现有数据中获取数据,所以我想取消注释一些标记。试试这个:document.body.innerHTML.replace(//gm,”)@Kobi你能给我一个这个.data
的引用吗?我找不到任何dom元素有数据字段的引用。谢谢,但是,获取一个隐藏的(注释的)HTML元素不是有问题吗对于jQuery??当我试图在JQ中为一个注释元素运行一个简单的选择器时,它什么也不返回,就JQ而言,似乎这个元素不存在……这是怎么回事???@TheCuBeMan-注释掉的元素实际上不作为元素存在,只作为注释文本。这段代码可以读取注释,但同样,没有HT因此,“初始”选择器是一个通用的选择器(如上面的“table tr”),而不是特定的,更不用说被注释的元素本身了……顺便说一下,如果您想用HTML转义注释(例如,注释包含“2<4”),您可以使用.replaceWith(function(){return document.createTextNode(this.data);};
(function ($) {
$.fn.uncomment = function () {
for (var i = 0, l = this.length; i < l; i++) {
for (var j = 0, len = this[i].childNodes.length; j < len; j++) {
if (this[i].childNodes[j].nodeType === 8) {
var content = this[i].childNodes[j].nodeValue;
$(this[i].childNodes[j]).replaceWith(content);
}
}
}
};
})(jQuery);
<div class="commented-container">
<!--
<script src="some-expensive-widget.js"></script>
<img src="some-expensive-widget-logo.jpg" />
-->
</div>
$(".commented-container").uncomment();