Czy zagnieżdżone komentarze HTML są możliwe?

Jak w tytule; czy możliwe jest zagnieżdżanie komentarzy w poprawnym HTML? zobacz przykład poniżej...

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

Wygląda na to, że nie, czy ktoś wie, jak Mogę dostać zagnieżdżone komentarze do pracy?

Author: Donald Duck, 2009-01-14

10 answers

Gdy zagnieżdżasz komentarz, zamień " -- "na" - -". Kiedy odłączysz Gniazdo, Odwróć procedurę. To nie <!-- jest zabronione, ale --.

Przykład:

<!-- some stuff
<!- - some inner stuff - ->
<!- - a sibling - ->
the footer -->
 107
Author: Aaron Digulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-11 21:25:09

TL; DR: niestety, nie, to niemożliwe (i nigdy nie będzie).

Krótka odpowiedź:

Komentarz HTML nie jest taki, jak wielu myśli, że jest. HTML jest formą SGML, w której komentarze są rozdzielane parami podwójnych myślników (-- ... --).

Tak więc, każda para dwunożnych kresek wewnątrz pary nawiasów kątowych z wykrzyknikiem po nawiasie otwierającym ( ---- >) jest skomentuj. Spec mówi to lepiej niż ja: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

Dlatego komentarze takie jak ten (który mamy wszystkie prawdopodobnie wykonane raz lub drugi) są bad idea:

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

prawda: jestem zbyt leniwy, aby powiedzieć, ile komentarzy jest reprezentowanych przez powyższy tag, ale to co najmniej 10.

[[4]] mniej się leniuchowałem: ten tzw. "komentarz" w rzeczywistości składa się z 10 komentarzy, trzy słowa poza komentarzem (tzn. po prostu zły SGML), a początek komentarza, który nie został zakończony. To prawdziwy bałagan:
<!--1----2----3----4----5--
HEADER BEGINS HERE
--6----7----8----9----10-- -->

Oczywiście, to nie jest całkiem {33]} tak proste, ze względu na różnice w sposobie interpretowania specyfikacji przez każdą przeglądarkę.

Oto doskonały artykuł, który to wyjaśnia:

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

Długa odpowiedź: dlaczego dostajemy wrong

Większość z nas, którzy dorastali z HTML (bez zagłębiania się w SGML, który jest jego podstawą)) doszła do przekonania, że ciąg kończy komentarz.

Właściwie, i > rozgranicz deklarację SGML w dokumencie HTML, taką jak deklaracja DOCTYPE, którą wszyscy widzieliśmy na górze naszych stron. W deklaracji SGML komentarze są rozdzielane podwójnymi myślnikami. Tak więc, Komentarz HTML

<!-- this is a comment -->

Które większość z nas wierzy, że jest tak parsowane jest przetwarzany w ten sposób:
-- to jest komentarz -->. Jest to deklaracja SGML, która jest pusta z wyjątkiem komentarza.

Ponieważ HTML jest formą SGML, ten "comment-within-a-declaration" funkcjonuje jako komentarz HTML.

Z ciekawości, oto kawałek czystego SGML to pokazuje komentarze funkcjonujące zgodnie z ich przeznaczeniem w SGML: ta definicja listy atrybutów zawiera komentarz w każdej linii:

<!ATTLIST LINK
  %attrs;                              -- %coreattrs, %i18n, %events --
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  href        %URI;          #IMPLIED  -- URI for linked resource --
  hreflang    %LanguageCode; #IMPLIED  -- language code --
  type        %ContentType;  #IMPLIED  -- advisory content type --
  rel         %LinkTypes;    #IMPLIED  -- forward link types --
  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
  media       %MediaDesc;    #IMPLIED  -- for rendering on these media --
>
 99
Author: Dave Land,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-24 21:57:35

Nie da się tego zrobić. --> zawsze zakończy istniejący komentarz HTML.

 8
Author: Sergio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 00:29:05

Jeśli naprawdę utknąłeś z jakimś kawałkiem HTML – pre-renderowanym w jakimś niekontrolowanym źródle – który zawiera komentarze, i musisz upewnić się, że żaden z nich nie jest renderowany na twojej stronie, zawsze możesz go zawinąć tagiem script Jak Poniżej, tylko rzecz w tym, że nie możesz komentować tagów script w ten sposób.

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

Jeśli chcesz skomentować tagi script, możesz użyć textarea jako wrappera, oczywiście robiąc to w ten sposób, nie możesz komentować textarea tagi.

<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>
 7
Author: Mathijs Flietstra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-19 10:06:22

Użyj znacznika template. Najszybszy sposób, aby zablokować wszystkie komentarze i inne html z wyświetlania się.

<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.
 7
Author: Dexter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 12:32:25

Niektórzy edytorzy mają polecenia komentowania/komentowania, które mogą automatycznie obsługiwać istniejące komentarze w bloku tekstu. Visual Studio robi to np. po naciśnięciu Ctrl + KC i Ctrl + KU.

 1
Author: Dirk Vollmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-14 12:39:27

A VS add - in, który fałszuje zagnieżdżone komentarze, automatycznie konwertując <!--...--> na <!~~...~~>, a następnie komentuje całą sekcję. Umożliwia włączanie i wyłączanie.

Zagnieżdżone-komentarze

 1
Author: Paul Gorbas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-24 21:12:28

Myślę, że nie jest to dozwolone, ale z tego, co wiem, działa w większości głównych przeglądarek z wyjątkiem Firefoksa.

 0
Author: TheHippo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-30 18:14:28

Spróbuj użyć tego

<!-- 

To jest początek komentarza

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

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

--> Koniec komentarzy.

 0
Author: drw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-15 07:30:05

Spróbuj tego

<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>
 0
Author: txavier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-02 15:03:39