嵌套的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>