是否可以使用 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 注释的主要内容,如果未能解决你的问题,请参考以下文章