根据标题;是否可以在有效的HTML中嵌套注释?见下面的例子......
<p>some text</p>
<!-- comment 1
<p>commented out html</p>
<!-- comment 2
// are nested html comment allowed?
end of comment 2 -->
<p>more commented out html</p>
end of comment 1 -->
<p>some more text</p>
看来没有,有人知道如何让嵌套的评论起作用吗?
答案 0 :(得分:91)
嵌套评论时,请将“ - ”替换为“ - - ”。取消嵌套时,请反转该过程。这不是被禁止的<!--
,而是--
。
示例:
<!-- some stuff
<!- - some inner stuff - ->
<!- - a sibling - ->
the footer -->
答案 1 :(得分:91)
TL; DR :不幸的是,不,这是不可能的(而且永远不会)。
简答:
HTML评论并不是很多人认为的。 HTML是SGML的一种形式,其中注释由双短划线( - ... - )分隔。
因此,在一对尖括号内的任意一对双短划线在开括号后面有一个感叹号(&lt;! - ⋯ - &gt; )是一条评论。规范说它比我更好:http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4
这就是为什么像这样的评论(我们 所有 可能会做一次或另一次)是 坏 想法:
<!-- ------------------ HEADER BEGINS HERE -------------------- -->
真相:我太懒了,不能告诉你上面的标签污染有多少评论,但它至少有10个。
我不那么懒:这个所谓的“评论”实际上包含10条评论, 任何评论之外的三个词(即刚刚坏的SGML),以及 未终止的评论的开头。这真是一团糟:
<!--1----2----3----4----5-- HEADER BEGINS HERE --6----7----8----9----10-- -->
当然,由于每个浏览器选择解释规范的方式不同,因此完全并非如此简单。
这是一篇很好的解释它的文章:
http://weblog.200ok.com.au/2008/01/dashing-into-trouble-why-html-comments.html
答案很长:为什么我们弄错了
我们大多数用HTML长大的人(没有深入研究它的基础的SGML))已经开始相信字符串&lt;! - 开始注释,字符串 - &gt; 结束评论。
实际上,&lt;!和&gt; 分隔HTML文档中的SGML声明,例如我们在页面顶部看到的DOCTYPE声明。 在 SGML声明中,注释由双短划线分隔。因此,HTML评论
<!-- this is a comment -->
我们大多数人都会相信这样解析&lt;! - 这是一个评论 - &gt; 实际上已被解析像这样:
&lt;! - 这是一条评论 - &gt; 。除了注释之外,它是一个空的SGML声明。
由于HTML是SGML的一种形式,因此“声明中的注释”可用作HTML注释。
出于兴趣,这里有一大块纯粹的SGML,它显示注释在SGML中的作用:这个属性列表定义包含对每一行的注释:
<!ATTLIST LINK %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- char encoding of linked resource -- href %URI; #IMPLIED -- URI for linked resource -- hreflang %LanguageCode; #IMPLIED -- language code -- type %ContentType; #IMPLIED -- advisory content type -- rel %LinkTypes; #IMPLIED -- forward link types -- rev %LinkTypes; #IMPLIED -- reverse link types -- media %MediaDesc; #IMPLIED -- for rendering on these media -- >
答案 2 :(得分:8)
无法做到。 -->
将始终结束现有的HTML评论。
答案 3 :(得分:5)
使用template
标记。阻止所有评论和其他HTML显示的最快方法。
<template>
<!-- first paragraph-->
Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<!-- second paragraph-->
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</template>
<!-- third paragraph-->
Ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.sunt in culpa qui officia deserunt mollit.
答案 4 :(得分:4)
如果您真的遇到了一些HTML - 在某些无法控制的源上预渲染 - 其中包含注释,并且您需要确保它们都没有在您的页面上呈现,您始终可以使用{ {1}}标记如下,唯一的问题是,您不能以这种方式注释script
标记。
script
如果您需要发表评论<p>some text</p>
<!-- multiline "comment" below using script type="text/html" -->
<script type="text/html">
<p>commented out html</p>
<!-- comment 2
// are nested html comment allowed?
end of comment 2 -->
<p>more commented out html</p>
</script>
<p>some more text</p>
代码,则可以使用script
代替包装,当然这样做,您无法注释掉textarea
代码。< / p>
textarea
答案 5 :(得分:1)
某些编辑器具有注释/取消注释命令,可以自动处理文本块中的现有注释。 Visual Studio,例如按Ctrl + KC和Ctrl + KU时会这样做。
答案 6 :(得分:0)
我认为这是不允许的,但据我所知,除了Firefox之外,它在大多数主流浏览器中都有效。
答案 7 :(得分:0)
尝试使用此
<!--
这是评论的开始
<%-- this is another comment --%>
<%-- this is another one --%>
-->
评论结束。
答案 8 :(得分:0)
试试这个
<p>some text</p>
<comment> comment 1
<p>commented out html</p>
<!-- comment 2
// are nested html comment allowed?
end of comment 2 -->
<p>more commented out html</p>
end of comment 1 </comment>
<p>some more text</p>
答案 9 :(得分:0)
一个VS插件,它通过自动将<!--...-->
转换为<!~~...~~>
并随后注释掉整个部分来伪造嵌套注释。它使您可以打开和关闭它。