是否可以使用 jquery 从 dom 中删除 html 注释

Posted

技术标签:

【中文标题】是否可以使用 jquery 从 dom 中删除 html 注释【英文标题】:is it possible to remove an html comment from dom using jquery 【发布时间】:2011-01-22 19:17:53 【问题描述】:

只是想知道是否有办法使用 jquery 删除 html 注释。

<!-- <div id="main">Some text </div> -->

谢谢

【问题讨论】:

虽然它可以从 DOM 中删除,但据我所知,您无法对在浏览器中使用“查看源代码”菜单选项的人隐藏它。你真的应该使用服务器端脚本来做到这一点。 【参考方案1】:

当脚本尝试访问 IFrame 内容时,我遇到了错误。 这是一个跳过 IFrame 的修改版本:

$('*')
.filter((idx, el) => !(el instanceof HTMLIFrameElement))
.contents()
.each(() => 
    try 
        if(this.nodeType === Node.COMMENT_NODE) 
            $(this).remove();
        
     catch (e) 
        console.error(e);
    
);

【讨论】:

【参考方案2】:

试试这个:

$('*').contents().each(function() 
    if(this.nodeType === Node.COMMENT_NODE) 
        $(this).remove();
    
);

编辑:这会从 DOM 中删除元素。浏览器通常存储可通过菜单项访问的原始页面源的副本。这不会得到更新。

如果您想隐藏您的 cmets,您始终可以使用 javascript 将整个 HTML 标记(使用 cmets)插入到 DOM 中。当然,可以查看 javascript,但与人们最初查看的位置相比,它是一个步骤。

【讨论】:

@Sinan - 在 Firefox 3.5.8 for Mac 中为我工作。我将原始版本的代码更新为使用 * 而不是 body,因为它没有将 cmets 嵌入到 body 的后代中。 @Sinan - 好吧,我想这将取决于您如何查看源代码。使用 Firebug,它们将被删除,但使用“页面源”菜单项检索的源永远不会更新。它始终处于原始状态。 @Patrick,我现在检查了我的 FF,它也是 3.5.8,对不起,我认为它是 3.6,我也在 Mac 上,无论如何我认为我的萤火虫没有给我正确的结果.正如你所说,页面源一旦加载就不会更新,而且我的萤火虫没有显示任何 HTML cmets,所以我不知道评论是否被删除。 @Sinan - 您可以通过单击 HTML 选项卡中的黑色小三角形让 FF 显示 cmets,然后选择“显示评论”。或者,如果您使用的是 Safari(或者可能像我一样使用 OmniWeb),您可以右键单击页面上的任意位置,然后单击“检查元素”。 Safari 的开发者工具似乎默认显示 cmets。 建议:this.nodeType == Node.COMMENT_NODE 不是更具描述性/可读性的代码吗?【参考方案3】:

这可能有点老套,但对我来说绝对是一种享受。

它利用了 split() 函数。

首先

codeWithComments = $("*yourelementhere*").html();
var withoutComments = codeWithComments.split('-->');
$("*yourelementhere*").html(withoutComments[withoutComments.length-1]);

这将直接用最后一个'-->'之后的代码替换给定元素的HTML,这当然假设您在给定元素中只有一组cmets。您可以在评论的最后一行拆分以获得完全匹配。

为我工作,可能不适用于所有情况。

【讨论】:

【参考方案4】:

我不知道。但我不明白它的用途是什么。仅当您查看页面源时才会看到评论,并且大多数(如果不是全部)具有查看源选项的浏览器默认情况下会在加载 javascript 之前为您提供源。

【讨论】:

@user113716,你错过了 Jasper 的全部观点。只有在通过 DOM 检查器查看实时页面时才会删除 cmets。如果有人右键单击页面并选择“查看源代码”,他们将看到 cmets,因为查看源代码时不会运行 javascript。因此,如果您正在考虑使用上述方法隐藏敏感信息,请三思。【参考方案5】:

我几乎可以肯定 cmets 实际上并不是 DOM 的一部分。它们是原始 HTML 代码的一部分,但是当浏览器将其转换为 DOM 时,它们会被剥离,因为它们没有用于渲染的目的。

【讨论】:

以上是关于是否可以使用 jquery 从 dom 中删除 html 注释的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jquery从DOM中删除随机生成的属性?

暂时删除并稍后重新插入 DOM 元素?

jQuery对DOM节点进行操作(删除节点)

jQuery对DOM节点进行操作(删除节点)

当我删除对象时,jQuery 是不是会自动从对象中删除附加的处理程序?

在 jQuery Mobile 中显示对话框时页面从 DOM 中删除