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

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

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

谢谢

【问题讨论】:

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

标签: jquery


【解决方案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 时,它们会被剥离,因为它们没有用于渲染的目的。

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 2013-12-08
        • 2018-07-01
        • 2014-04-21
        • 2011-11-27
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        • 2023-03-16
        相关资源
        最近更新 更多