使用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> -->

带有一些注释标记的Html表。我只是想取消那些标签的注释。我尝试过使用javascript的正则表达式,但问题是它删除了整个注释行,因为我只想取消注释这些标记。下面是带有注释标记的示例html表

<table>
   <tr>
         <td>ABCD</td>
         <td>Logic</td>
         <!-- <td>26538568</td> -->
   </tr>
</table>

ABCD
逻辑
所以在上面的代码中,我只想取消注释

请注意,这是从网页抓取数据的一部分,所以我不能更改html代码。上面提到的表结构类似于我试图从中提取数据的网页。

因此您需要查找并替换,例如:

$("body").html($("body").html().replace('<!--', '&lt;!--'));

$(“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();