【问题标题】:Are nested HTML comments possible?可以嵌套 HTML 注释吗?
【发布时间】:2010-10-01 08:43:36
【问题描述】:

根据标题;是否可以在有效的 HTML 中嵌套 cmets?看下面的例子……

<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>

似乎没有,有人知道我如何让嵌套的 cmets 工作吗?

【问题讨论】:

  • ...或者我认为不可能,但也许比我更有经验的人会知道!
  • 如果对 HTML 中的有效内容有疑问,我通常会直奔主题并严格遵守标准。具体来说,validator.w3.org 的 W3C 标记验证服务

标签: html validation comments


【解决方案1】:

不允许嵌套 HTML cmets &lt;!-- comment1 &lt;!-- comment2--&gt; --&gt;

但您可以通过使用&lt;script&gt; 标签和/* */(Hacky 解决方案)来实现:

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

注意:您还可以在同一个 HTML 文件中包含多个 &lt;script&gt;...&lt;/script&gt; 对,用于注释掉代码的不同部分。

示例:下面的 cmets 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>

【讨论】:

    【解决方案2】:

    一个伪造嵌套 cmets 的 VS 插件,通过自动将 &lt;!--...--&gt; 转换为 &lt;!~~...~~&gt; 然后 cmets 整个部分。它可以让您打开和关闭它。

    nested-comments

    【讨论】:

      【解决方案3】:

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

      例子:

      <!-- some stuff
      <!- - some inner stuff - ->
      <!- - a sibling - ->
      the footer -->
      

      【讨论】:

      • 这是否意味着内部评论不再是正确的评论?
      • 是的,HTML 和 XML 不允许使用
      【解决方案4】:

      使用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.
      

      【讨论】:

      • &lt;template&gt; 元素不能随便添加到任何地方。它的父元素必须是&lt;body&gt; 元素或a few select others
      【解决方案5】:

      如果你真的被一些 HTML 卡住了——在一些不可控的源预渲染——它包含 cmets,并且你需要确保它没有在你的页面上呈现,你总是可以用 @ 包裹它987654321@ 标签如下,唯一的问题是,你不能这样注释掉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作为包装器,当然这样做,你不能注释掉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>

      【讨论】:

      • 聪明!但是如果 HTML 代码已经包含
      • @Willem,使用可能适用于您的场景的其他方法更新了答案..
      • 谢谢,这是一种新颖的方式。或许你也可以用 JS 注释块包装这个东西:/* */
      【解决方案6】:

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

      【讨论】:

      • 其他编程语言如 LUA 允许。 ==[[ 和 ==[1[ 是两个独立注释块的开始。我看不出为什么有一天 HTML 不能做同样的事情。
      【解决方案7】:

      试试这个

      <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>
      

      【讨论】:

      • 你能解释一下吗?我不知道 HTML 中有 &lt;comment&gt; 关键字
      【解决方案8】:

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

      简答:

      HTML 注释并不像许多人想象的那样。 HTML 是 SGML 的一种形式,其中 cmets 由成对的双破折号 (-- ... --) 分隔。

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

      这就是为什么像这样的 cmets(我们所有很可能曾经做过一次)是一个 想法:

       结束评论。
      
      

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

      我们大多数人都认为是这样解析的 实际上是这样解析的:
      -- 这是一条评论 --> .这是一个 SGML 声明,除了注释之外是空的。

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

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

      
          

      【讨论】:

      • 有趣。我想知道html5解析是否仍然如此。
      • 不幸的是,是的,它仍然是正确的,因为它是所有 HTML(包括 HTML5)所基于的底层 SGML 基础的一部分。这几乎是不可能改变的。
      【解决方案9】:

      试试这个

      <!-- 
      

      这是评论的开始

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

      --&gt; cmets 结束。

      【讨论】:

        【解决方案10】:

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

        【讨论】:

          【解决方案11】:

          一些编辑器有注释/取消注释命令,可以自动处理文本块中的现有 cmets。 Visual Studio 例如当您按下 Ctrl+KC 和 Ctrl+KU 时,正在执行此操作。

          【讨论】:

          • 我正在尝试你所说的 Ctrl+KC & Ctrl+KU 用于 VS2013 中的嵌套 html cmets,但不幸的是它没有处理它。
          猜你喜欢
          • 2013-08-11
          • 1970-01-01
          • 2012-08-03
          • 2012-01-17
          • 1970-01-01
          • 1970-01-01
          • 2012-03-16
          • 2012-08-01
          • 1970-01-01
          相关资源
          最近更新 更多