ネストされたHTMLコメントは可能ですか?


96

タイトル通り; 有効な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
...または私はそれは可能ではないと思いますが、おそらく私よりも多くの経験を持つ誰かが知っているでしょう!
QAZ、

HTMLで何が有効かについて疑問がある場合は、私は通常、追いかけて、標準の人に厳しく言います。具体的には、validator.w3.orgの
Mawgはモニカを2010

回答:


103

コメントをネストする場合は、「-」を「--」に置き換えます。ネストを解除する場合は、手順を逆にします。それ<!--は禁止されているのではなく、--です。

例:

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

4
これは、内部コメントが適切なコメントではなくなったことを意味しますか?
S.Lott、2009年

10
はい。HTMLとXMLでは、<!-を使用してコメントをネストすることはできません。独自のコードでできることは、コメント要素を定義し、解析中にアクティブに無視することです。
アーロンディグラ2009年

1
あなたは交換する必要があることを注記--して- - インナー(ネスト)コメントを
ebosi

3
「-」を「--」に変更すると、コメントではなくなります。それは解決策ではないのですが、道の周りに、あなたはまた、「使用することができます回避する方法については、<% - % -あなたのコメントを>。
Anant Singh氏

これはどのようにして投票され、ベストアンサーとして受け入れられましたか?それも機能しません!Geesh。以下のDave Landの説明をお読みください。
John E

97

TL; DR:残念ながら、できません。それは不可能です(不可能になるでしょう)。

短い答え:

HTMLコメントは、多くの人がそう思っているものではありません。HTMLはSGMLの形式であり、コメントは2つのダッシュ(----)のペアで区切られます  。

したがって、開始ブラケット(<! ---- >)の後に感嘆符が付いた1対の山括弧内の二重ダッシュのペアはコメントです。仕様では、私よりも優れているとされています:http : //www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

このため、次のようなコメント(おそらく何度か行っている可能性があります)は悪い考えです。

<!------------------- HEADER BEGINS HERE --------------------->

真実:上記のタグ汚染によって表されるコメントの数を言うのは面倒ですが、少なくとも10です。

怠惰になった:このいわゆる「コメント」は、実際には10個のコメント、コメントの外側の3つの単語(つまり、悪い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宣言内では、コメントは2つのダッシュで区切られます。したがって、HTMLコメント

<!-これはコメントです->

ほとんどの人は、このように解析されると信じています<!-- this is a comment -->が、実際には次のように解析されます
<!-- this is a comment -->。コメント以外は空のSGML宣言です。

HTMLはSGMLの形式であるため、この「宣言内のコメント」はHTMLコメントとして機能します。

興味深いことに、SGMLで意図したとおりに機能しているコメントを示す純粋なSGMLの一部を次に示します。この属性リストの定義には、各行にコメントが含まれています。

<!ATTLISTリンク
  %attrs; -%coreattrs、%i18n、%events-
  charset%Charset; #IMPLIED-リンクされたリソースの文字エンコーディング-
  href%URI; #IMPLIED-リンクされたリソースのURI-
  hreflang%LanguageCode; #IMPLIED-言語コード-
  タイプ%ContentType; #IMPLIED-推奨コンテンツタイプ-
  rel%LinkTypes; #IMPLIED-前方リンクタイプ-
  %LinkTypesの改訂; #IMPLIED-リバースリンクタイプ-
  メディア%MediaDesc; #IMPLIED-これらのメディアでのレンダリング用-
>

1
面白い。これはまだhtml5解析に当てはまるのでしょうか。
Kzqai 2013

1
残念ながら、そうです。HTML5を含むすべてのHTMLの基礎となっているSGML基盤の一部であるため、これは依然として真実です。これを変えることはほとんど不可能です。
Dave Land

8

出来ません。-->常に既存のHTMLコメントを終了します。


4
LUAのような他のプログラミング言語はそれを可能にします。== [[と== [1 [は、2つの別々のコメントブロックの始まりです。いつの日かHTMLが同じことを行えなかった理由はわかりません。
john ktejik 2014年

7

コメントが含まれている、制御できないソースで事前にレンダリングされた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タグをコメントアウトする必要がある場合はtextarea、代わりにasラッパーを使用できますが、もちろんこの方法で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>


1
賢い!ただし、HTMLコードにすでに<script>タグが含まれている場合の
Willem

3
@Willemは..あなたのシナリオに働くかもしれない追加的なアプローチとの答えを更新
Mathijs Flietstraに

1
ありがとう、それは斬新な方法です。おそらく、あなたはまた、JSのコメントブロックでものを包むことができます:/* */
ウィレム・

7

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.

<template>要素はどこでも追加することはできません。その親要素は、<body>要素またはいくつかを選択して他の要素にする必要があります
John E

1

一部のエディターには、テキストブロック内の既存のコメントを自動的に処理できるコメント/コメント解除コマンドがあります。たとえば、Visual Studioは、Ctrl + KCとCtrl + KUを押すとそれを実行します。


VS2013でネストされたhtmlコメントに対してCtrl + KCおよびCtrl + KUについてあなたが言ったことを試していますが、残念ながらそれは処理していません。
Mahdi Alkhatib


0

許可されていないと思いますが、私の知る限り、Firefoxを除くほとんどの主要なブラウザで機能します。


0

これを使ってみてください

<!-- 

これがコメントの始まりです

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

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

--> コメントの終わり。


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>

1
説明できますか?<comment>HTMLのキーワードを認識していませんでした
Mawgはモニカを18:11
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.