带有一些注释标签的Html表。我只想取消注释这些标签。我已经尝试使用javascript的正则表达式,但问题是它删除整个注释行,因为我只是想取消注释这些标签。下面带有注释标签的示例html表......
<table>
<tr>
<td>ABCD</td>
<td>Logic</td>
<!-- <td>26538568</td> -->
</tr>
</table>
所以在上面的代码中我只想取消注释<!-- <td>26538568<td> -->
。
请这是从网页抓取数据的一部分,所以我无法更改html代码。上面提到的表结构类似于我尝试提取数据的网页。
答案 0 :(得分:13)
您可以使用DOM来完成此操作,而无需将文档视为文本。例如,使用jQuery:
$('table tr')
.contents()
.filter(function(){return this.nodeType === 8;}) //get the comments
.replaceWith(function(){return this.data;})
这里有趣的是.contents
,它返回所有节点,而不仅仅是元素 - 这包括文本节点和注释。
工作示例:http://jsfiddle.net/9Z5T5/2/
警告注意:我不确定跨浏览器是怎么回事。具体而言,可能不支持node.data
。我已经在Firefox,Chrome和IE 10中测试了这段代码。
答案 1 :(得分:4)
所以你需要找到并替换,例如:
$("body").html($("body").html().replace('<!--', '<!--'));
然后它会显示评论有文字
答案 2 :(得分:1)
有一个非常有用的小jquery插件正是这样做的。我没有写它,但它是开源的,这里是代码&amp;归属于原始来源:
http://vistaprint.github.io/SkinnyJS/jquery.uncomment.html
在我们的网站上运作良好。
Javascript是:
try-except
将代码放入
(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>
我们正在使用它来推迟/排除移动用户的一些图片密集型图库,以加快页面加载速度。
skinny.js的一部分..你可以在这里找到: http://vistaprint.github.io/SkinnyJS/
答案 3 :(得分:0)
不是你正在使用的正确方法,最好通过将其隐藏并使用方法show使用javascript在屏幕上显示来隐藏该行。 这是正确的代码:
<table>
<tr>
<td>ABCD<td>
<td>Logic<td>
<td class='td_hide'>26538568<td>
</tr>
</table>
<style>
.td_hide{
display:none;
}
</style>
如果要通过javascript显示列,请使用:
jQuery('td.td_hide').show();
答案 4 :(得分:-1)
如果你想要
,你可以这样做<script>
jQuery('td.#hide').show();
</script>
<table>
<tr>
<td>ABCD<td>
<td>Logic<td>
<td id='hide' style="display:none">26538568<td>
</tr>
</table>
所以这里最初他们将隐藏td元素,所以如果你想调用添加一个函数并添加上面的jquery来取消隐藏它..