【发布时间】:2011-01-22 19:17:53
【问题描述】:
只是想知道是否有办法使用 jquery 删除 html 注释。
<!-- <div id="main">Some text </div> -->
谢谢
【问题讨论】:
-
虽然它可以从 DOM 中删除,但据我所知,您无法对在浏览器中使用“查看源代码”菜单选项的人隐藏它。你真的应该使用服务器端脚本来做到这一点。
标签: jquery
只是想知道是否有办法使用 jquery 删除 html 注释。
<!-- <div id="main">Some text </div> -->
谢谢
【问题讨论】:
标签: jquery
当脚本尝试访问 IFrame 内容时,我遇到了错误。 这是一个跳过 IFrame 的修改版本:
$('*')
.filter((idx, el) => !(el instanceof HTMLIFrameElement))
.contents()
.each(() => {
try {
if(this.nodeType === Node.COMMENT_NODE) {
$(this).remove();
}
} catch (e) {
console.error(e);
}
});
【讨论】:
试试这个:
$('*').contents().each(function() {
if(this.nodeType === Node.COMMENT_NODE) {
$(this).remove();
}
});
编辑:这会从 DOM 中删除元素。浏览器通常存储可通过菜单项访问的原始页面源的副本。这不会得到更新。
如果您想隐藏您的 cmets,您始终可以使用 javascript 将整个 HTML 标记(使用 cmets)插入到 DOM 中。当然,可以查看 javascript,但与人们最初查看的位置相比,它是一个步骤。
【讨论】:
* 而不是 body,因为它没有将 cmets 嵌入到 body 的后代中。
this.nodeType == Node.COMMENT_NODE 不是更具描述性/可读性的代码吗?
这可能有点老套,但对我来说绝对是一种享受。
它利用了 split() 函数。
首先
codeWithComments = $("*yourelementhere*").html();
var withoutComments = codeWithComments.split('-->');
$("*yourelementhere*").html(withoutComments[withoutComments.length-1]);
这将直接用最后一个'-->'之后的代码替换给定元素的HTML,这当然假设您在给定元素中只有一组cmets。您可以在评论的最后一行拆分以获得完全匹配。
为我工作,可能不适用于所有情况。
【讨论】:
我不知道。但我不明白它的用途是什么。仅当您查看页面源时才会看到评论,并且大多数(如果不是全部)具有查看源选项的浏览器默认情况下会在加载 javascript 之前为您提供源。
【讨论】:
javascript。因此,如果您正在考虑使用上述方法隐藏敏感信息,请三思。
我几乎可以肯定 cmets 实际上并不是 DOM 的一部分。它们是原始 HTML 代码的一部分,但是当浏览器将其转换为 DOM 时,它们会被剥离,因为它们没有用于渲染的目的。
【讨论】: