嵌套的HTML评论可能吗?
按照标题; 是否有可能在有效的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>
它似乎不是,有人知道我怎么能得到嵌套评论工作?
提前致谢。
嵌套注释时,请将“ – ”replace为“ – – ”。 当您取消嵌套时,请反转该程序。 这不是<!--
这是被禁止的,但是--
。
TL; DR :不幸的是,这不可能(而且永远不会)。
简短的回答:
一个HTML评论不是很多人认为的。 HTML是SGML的一种forms,其中注释由双破折号( - … - )分隔。
因此,在括号后面带有感叹号的一对尖括号内的双破折号( <! - ⋯ - > )是注释。 该规范说,它比我可以: http : //www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4
这就是为什么像这样的评论(我们可能曾经做过这样的评论)是一个坏主意:
<! - ------------------ HEADER BEGINS HERE -------------------- - >
真相:我懒得告诉你上述标签污染有多less意见,但是至less有10个。
我没那么懒惰:这个所谓的“评论”实际上是由10条评论,3条评论以外的任何评论(也就是坏的SGML)组成的,而评论的开始并没有终止。 这真是一团糟:
<! - 1 - - 2 - - 3 - - 4 - - 5 - 标题在这里开始 - 6 - - 7 - - 8 - - 9 - - 10 - - >
当然,这不是那么简单,因为每个浏览器如何select解释规范的差异。
这里有一篇很好的文章解释它:
http://weblog.200ok.com.au/2008/01/dashing-into-trouble-why-html-comments.html
长答案:为什么我们错了
我们大多数用HTML成长起来的人(没有深入了解底层的SGML)都相信string<! -开始注释,string- >结束注释。
其实, <! 和>在HTML文档中定义一个SGML声明,比如我们在页面顶部看到的DOCTYPE声明。 在 SGML声明中,评论用双划线分隔。 因此,HTML评论
<! - 这是一个评论 - >
我们大多数人会相信这样的parsing<! - 这是一个评论 - >实际上是这样parsing:
<! - 这是一个评论 - > 。 除了评论外,这是一个SGML声明。
因为HTML是SGML的一种forms,所以这个“声明中的注释”用作HTML注释。
出于兴趣,下面是一个纯SGML块,它显示了注释在SGML中的function:该属性列表定义在每行上都包含注释:
<!ATTLIST LINK %ATTRS; - %coreattrs,%i18n,%events - charset%Charset; #IMPLIED - 链接资源的字符编码 - href%URI; #IMPLIED - 链接资源的URI - hreflang%LanguageCode; #IMPLIED - 语言代码 - 键入%ContentType; #IMPLIED - 咨询内容types - rel%LinkTypes; #IMPLIED - 转发链接types - rev%LinkTypes; #IMPLIED - 反向链接types - 媒体%MediaDesc; #IMPLIED - 用于在这些媒体上呈现 - >
这是不能做到的。 -->
将始终结束现有的HTML注释。
一些编辑有评论/取消注释的命令,可以自动处理一个文本块中的现有评论。 Visual Studio例如正在这样做,当你按下Ctrl + KC和Ctrl + KU。
如果你真的被一些HTML阻塞了 – 在一些不可控制的源代码中预渲染 – 包含注释,并且你需要确保它没有被渲染到你的页面上,你总是可以用下面的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>
我认为这是不被允许的,但据我所知,它在大多数主stream浏览器(Firefox除外)都能正常工作。
尝试使用这个
<!--
这是评论的开始
<%-- this is another comment --%> <%-- this is another one --%>
-->
评论结束。
尝试这个
<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>