Sind verschachtelte HTML-Kommentare möglich?

96

gemäß dem Titel; Ist es möglich, verschachtelte Kommentare in gültigem HTML zu haben? siehe das Beispiel unten ...

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

Es scheint nicht, weiß jemand, wie ich verschachtelte Kommentare zum Laufen bringen kann?

QAZ
quelle
4
... oder das halte ich nicht für möglich, aber vielleicht weiß es jemand mit mehr Erfahrung als ich!
QAZ
Wenn ich Zweifel habe, was in HTML gültig ist, gehe ich normalerweise auf die Jagd und gehe zu den Standard-Jungs. Insbesondere bei der W3C Markup Validation Service validator.w3.org
Mawg sagt wieder einzusetzen Monica

Antworten:

103

Wenn Sie einen Kommentar verschachteln, ersetzen Sie "-" durch "- -". Wenn Sie die Verschachtelung aufheben, kehren Sie den Vorgang um. Es ist nicht das <!--, was verboten ist, sondern das --.

Beispiel:

<!-- some stuff
<!- - some inner stuff - ->
<!- - a sibling - ->
the footer -->
Aaron Digulla
quelle
4
Bedeutet dies, dass der innere Kommentar kein richtiger Kommentar mehr ist?
S.Lott
10
Ja, HTML und XML erlauben es nicht, Kommentare mit <! - zu verschachteln. Was können Sie in Ihrem eigenen Code zu tun ist , einen Kommentar definieren Element und ignorieren sie aktiv bei der Analyse.
Aaron Digulla
1
Beachten Sie, dass Sie ersetzen sollte --mit - - der inneren (verschachtelte) Kommentar .
Ebosi
3
Wenn Sie "-" in "- -" ändern, ist dies kein Kommentar mehr. Es ist keine Lösung, sondern ein Weg, Sie können auch "<% - Ihr Kommentar -%>" verwenden, um einen Weg zu finden.
Anant Singh
Wie wurde dies positiv bewertet und als beste Antwort akzeptiert? Es funktioniert nicht einmal! Geesh. Bitte lesen Sie die Erklärung von Dave Land unten.
John E
97

TL; DR : Leider nein, das ist nicht möglich (und wird es auch nie sein).

Kurze Antwort:

Ein HTML-Kommentar ist nicht ganz das, was viele denken. HTML ist eine Form von SGML, bei der Kommentare durch Doppelstriche ( --…  --) begrenzt werden.

Daher ist jedes Paar Doppelstriche in einem Paar spitzer Klammern mit einem Ausrufezeichen nach der öffnenden Klammer ( <! ---- >) ein Kommentar. Die Spezifikation sagt es besser als ich kann: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

Aus diesem Grund sind Kommentare wie dieser (den wir wahrscheinlich alle schon einmal gemacht haben) eine schlechte Idee:

<! - ------------------ HEADER BEGINNT HIER -------------------- ->

Wahrheit: Ich bin zu faul, um Ihnen zu sagen, wie viele Kommentare durch die oben genannte Tag-Verschmutzung dargestellt werden, aber es sind mindestens 10.

Ich wurde weniger faul: Dieser sogenannte "Kommentar" besteht tatsächlich aus 10 Kommentaren, drei Wörtern außerhalb eines Kommentars (dh nur schlechter SGML) und dem Beginn eines Kommentars, der nicht beendet wird. Es ist ein echtes Durcheinander:

<!--1 ----2 ----3---- 4 ----5--
HEADER BEGINNT HIER
--6 ----7 ----8 ----9 ----10-- -->

Natürlich ist es nicht ganz so einfach, da sich die einzelnen Browser bei der Interpretation der Spezifikation unterscheiden.

Hier ist ein ausgezeichneter Artikel, der es erklärt:

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

Lange Antwort: Warum wir es falsch verstehen

Die meisten von uns, die mit HTML aufgewachsen sind (ohne sich mit der SGML zu befassen, die ihr zugrunde liegt), glauben, dass der String <!-- einen Kommentar beginnt und die Zeichenfolge -->einen Kommentar beendet.

Tatsächlich <!und >begrenzen Sie eine SGML-Deklaration in Ihrem HTML-Dokument, z. B. die DOCTYPE-Deklaration, die wir alle oben auf unseren Seiten gesehen haben.Innerhalb einer SGML-Deklaration werden Kommentare durch doppelte Bindestriche getrennt. Also der HTML-Kommentar

<! - das ist ein Kommentar ->

Was die meisten von uns glauben würden, dass es so analysiert wird, <!-- this is a comment -->wird tatsächlich so analysiert:
<!-- this is a comment --> . Es ist eine SGML-Deklaration, die bis auf einen Kommentar leer ist.

Da HTML eine Form von SGML ist, fungiert dieser "Kommentar innerhalb einer Deklaration" als HTML-Kommentar.

Aus Interesse ist hier ein Teil von reinem SGML, der Kommentare zeigt, die so funktionieren, wie sie in SGML beabsichtigt waren: Diese Attributlistendefinition enthält einen Kommentar in jeder Zeile:

<! ATTLIST LINK
  % attrs; -% coreattrs,% i18n,% events -
  Zeichensatz% Zeichensatz; #IMPLIED - Zeichencodierung der verknüpften Ressource -
  href% URI; #IMPLIED - URI für verknüpfte Ressource -
  hreflang% LanguageCode; #IMPLIED - Sprachcode -
  Typ% ContentType; #IMPLIED - Typ des Beratungsinhalts -
  rel% LinkTypes; #IMPLIED - Weiterleitungstypen -
  rev% LinkTypes; #IMPLIED - Reverse Link-Typen -
  media% MediaDesc; #IMPLIED - zum Rendern auf diesen Medien -
>
Dave Land
quelle
1
Interessant. Ich frage mich, ob dies für das Parsen von HTML5 immer noch zutrifft.
Kzqai
1
Leider ist dies immer noch der Fall, da es Teil der zugrunde liegenden SGML-Grundlagen ist, auf denen sämtliches HTML, einschließlich HTML5, basiert. Es ist so gut wie unmöglich, dass sich dies ändert.
Dave Land
8

Es kann nicht gemacht werden. -->beendet immer einen vorhandenen HTML-Kommentar.

Sergio
quelle
4
Andere Programmiersprachen wie LUA erlauben es. == [[und == [1 [sind der Beginn von zwei separaten Kommentarblöcken. Ich sehe keinen Grund, warum HTML eines Tages nicht dasselbe tun könnte.
John Ktejik
7

Wenn Sie wirklich mit einem Stück HTML stecken bleiben, das an einer unkontrollierbaren Quelle vorgerendert wurde und Kommentare enthält, und Sie sicherstellen müssen, dass nichts davon auf Ihrer Seite gerendert wird, können Sie es jederzeit mit einem scriptTag wie unten umschließen. Das einzige ist, dass Sie scriptTags auf diese Weise nicht auskommentieren können.

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

Wenn Sie scriptTags auskommentieren müssen, können Sie textareastattdessen einen als Wrapper verwenden. Natürlich können Sie textareaTags nicht auskommentieren.

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

Mathijs Flietstra
quelle
1
Klug! Aber was tun, wenn der HTML-Code bereits <script> -Tags enthält ...
Willem
3
@ Willem, aktualisierte die Antwort mit einem zusätzlichen Ansatz, der in Ihrem Szenario funktionieren könnte.
Mathijs Flietstra
1
Danke, das ist ein neuartiger Weg. Vielleicht könnten Sie das Ding auch in JS-Kommentarblöcke einwickeln:/* */
Willem
7

Verwenden templateTag. Der schnellste Weg, um zu verhindern, dass alle Kommentare und andere HTML-Dateien angezeigt werden.

<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.
Dexter
quelle
Das <template>Element kann nicht einfach irgendwo hinzugefügt werden. Das übergeordnete Element muss entweder das <body>Element sein oder einige andere auswählen .
John E
1

Einige Editoren verfügen über Befehle zum Kommentieren / Kommentieren, mit denen vorhandene Kommentare in einem Textblock automatisch verarbeitet werden können. Visual Studio tut dies beispielsweise, wenn Sie Strg + KC und Strg + KU drücken.

Dirk Vollmar
quelle
Ich versuche, was Sie für Strg + KC & Strg + KU für verschachtelte HTML-Kommentare in VS2013 gesagt haben, aber leider wird es nicht behandelt.
Mahdi Alkhatib
1

Ein VS-Add-In, das verschachtelte Kommentare fälscht, indem es automatisch konvertiert <!--...-->und <!~~...~~>dann den gesamten Abschnitt auskommentiert. Sie können es ein- und ausschalten.

verschachtelte Kommentare

Paul Gorbas
quelle
0

Ich denke, es ist nicht erlaubt, aber soweit ich weiß, funktioniert es in den meisten gängigen Browsern außer in Firefox.

TheHippo
quelle
0

versuche es damit

<!-- 

Dies ist der Beginn des Kommentars

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

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

--> Ende der Kommentare.

drw
quelle
0

Versuche dies

<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>
txavier
quelle
1
Können Sie erklären? Mir war kein <comment>Schlüsselwort in HTML bekannt
Mawg sagt, Monica