106

根据标题;是否可以在有效的 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>

似乎没有,有人知道我如何让嵌套评论起作用吗?

4

11 回答 11

115

嵌套注释时,将“--”替换为“- -”。取消嵌套时,反转该过程。不是<!--禁止的,而是禁止的--

例子:

<!-- some stuff
<!- - some inner stuff - ->
<!- - a sibling - ->
the footer -->
于 2009-01-14T12:35:30.590 回答
105

TL;DR:不幸的是,不,这是不可能的(而且永远不会)。

简短的回答:

HTML 注释并不像许多人认为的那样。HTML 是 SGML 的一种形式,其中注释由成对的双破折号 ( --… <kbd>--) 分隔。

<! --因此,一对尖括号内的任何一对双破折号在左括号 ( ⋯ )后带有一个感叹号-- >是注释。规范说得比我好:http ://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

这就是为什么像这样的评论(我们可能曾经做过一次)是一个主意:

<!-- ------------------ 标题从这里开始 -------------------- -->

真相:我懒得告诉你上面的标签污染代表了多少评论,但至少有10条。

我变得不那么懒惰了:这个所谓的“评论”实际上由 10 条评论、任何评论之外的三个词(即,只是糟糕的 SGML)和未终止的评论的开头组成。真是一团糟:

<!--1 ----2 ----3 ----4 ----5--
标题从这里开始
--6 ----7 ----8 ----9 ----10-- -->

当然,由于每个浏览器选择解释规范的方式不同,它并不是那么简单

这是一篇很好的文章来解释它:

    http://weblog.200ok.com.au/2008/01/dashing-into-trouble-why-html-comments.html

长答案:为什么我们弄错了

我们大多数在 HTML 中长大的人(没有深入研究它背后的 SGML))已经开始相信字符串<!--开始注释,字符串-->结束注释。

实际上,<!>您的 HTML 文档中定义一个 SGML 声明,例如我们在页面顶部看到的 DOCTYPE 声明。SGML 声明中,注释由双破折号分隔。因此,HTML 注释

<!-- 这是一条评论 -->

我们大多数人会认为是这样解析<!-- this is a comment -->的,实际上是这样解析的:
<!-- this is a comment -->. 它是一个除注释外为空的 SGML 声明。

因为 HTML 是 SGML 的一种形式,所以这个“comment-within-a-declaration”起到 HTML 注释的作用。

出于兴趣,这里有一块纯 SGML,它显示了在 SGML 中的预期功能:这个属性列表定义在每一行都包含一个注释:

<!ATTLIST 链接
  %attrs; -- %coreattrs, %i18n, %events --
  字符集 %字符集;#IMPLIED -- 链接资源的字符编码 --
  参考 %URI;#IMPLIED -- 链接资源的 URI --
  hreflang %语言代码;#IMPLIED -- 语言代码 --
  类型%内容类型;#IMPLIED -- 咨询内容类型 --
  相对 %LinkTypes; #IMPLIED -- 前向链接类型 --
  转 %LinkTypes; #IMPLIED -- 反向链接类型 --
  媒体 %MediaDesc; #IMPLIED -- 用于在这些媒体上渲染 --
>
于 2012-08-24T01:26:11.333 回答
11

如果你真的被一些 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>

如果你需要注释掉script标签,你可以使用textareaas 包装器,当然这样做,你不能注释掉textarea标签。

<p>some text</p>

<!-- multiline "comment" below using textarea style="display:none;" -->
<textarea style="display:none;">

  <script>  

    alert("which won't show up..");  

  </script>

  <p>commented out html</p>

  <!-- comment 2

      // are nested html comment allowed?

    end of comment 2 -->

  <p>more commented out html</p>

</textarea>

<p>some more text</p>

于 2017-05-10T20:25:20.747 回答
9

使用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.
于 2018-05-03T12:32:25.813 回答
8

这是不可能的。-->将始终结束现有的 HTML 注释。

于 2009-01-14T12:34:43.837 回答
4

<!-- comment1 <!-- comment2--> -->不允许嵌套 HTML 注释。

但是您可以通过使用<script>标签和/* */(Hacky 解决方案)来实现:

<script>
/*
  HTML code you want to comment on goes between the Javascript comment section
*/
</script>

注意:您也可以<script>...</script>在同一个 HTML 文件中包含多对用于注释代码的不同部分。

示例:下面的注释"Some Statement 2, 3, 4, 5 and 6"

<p> Some Statement 1 </p>

<script>
/*
<p> Some Statement 2 </p>

<!-- explanation about below statement 3 by the comment tag -->
<p> Some Statement 3 </p>

<!-- 
<p> Some Statement 4 </p> 
<p> Some Statement 5 </p>
-->

<p> Some Statement 6 </p>
*/
</script>

<p> Some Statement 7 </p>
于 2021-09-03T14:09:28.810 回答
3

一个 VS 插件,它通过自动转换<!--...--><!~~...~~>然后注释掉整个部分来伪造嵌套评论。它可以让您打开和关闭它。

嵌套评论

于 2019-04-24T21:12:28.493 回答
1

一些编辑器具有注释/取消注释命令,可以自动处理文本块中的现有注释。例如,当您按下 Ctrl+KC 和 Ctrl+KU 时,Visual Studio 就会这样做。

于 2009-01-14T12:39:27.837 回答
0

尝试使用这个

<!-- 

这是评论的开始

<%-- this is another comment --%>

<%-- this is another one --%>

-->评论结束。

于 2010-08-11T06:48:17.090 回答
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>
于 2016-11-02T15:03:39.650 回答
-1

我认为这是不允许的,但据我所知,它适用于除 Firefox 之外的大多数主要浏览器。

于 2009-01-30T18:14:28.343 回答