Возможны ли вложенные комментарии HTML? - PullRequest
86 голосов
/ 14 января 2009

согласно названию; Возможно ли иметь вложенные комментарии в действительном 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>

Кажется, нет, кто-нибудь знает, как я могу заставить вложенные комментарии работать?

Ответы [ 10 ]

91 голосов
/ 24 августа 2012

TL; DR : К сожалению, нет, это невозможно (и никогда не будет).

Краткий ответ:

Комментарий HTML не совсем то, что многие думают. HTML - это форма SGML, в которой комментарии разделяются парами двойных черточек ( - - ).

Таким образом, любая пара двойных черточек внутри пары угловых скобок с восклицательным знаком после открывающей скобки ( <! </kbd> - - > ) - комментарий. Спецификация говорит это лучше, чем я могу: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

Вот почему такие комментарии (которые мы все , вероятно, сделали один или другой раз) являются плохими идея:

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

Правда: мне лень говорить, сколько комментариев представлено вышеупомянутым загрязнением тега, но это как минимум 10.

Я стал менее ленивым: этот так называемый «комментарий» на самом деле состоит из 10 комментариев, три слова вне любого комментария (то есть просто плохой SGML), и начало комментария, который не прекращается. Это настоящий беспорядок:

<kbd><!</kbd><kbd>--</kbd>1<kbd>--</kbd><kbd>--</kbd>2<kbd>--</kbd><kbd>--</kbd>3<kbd>--</kbd><kbd>--</kbd>4<kbd>--</kbd><kbd>--</kbd>5<kbd>--</kbd>
HEADER BEGINS HERE
<kbd>--</kbd>6<kbd>--</kbd><kbd>--</kbd>7<kbd>--</kbd><kbd>--</kbd>8<kbd>--</kbd><kbd>--</kbd>9<kbd>--</kbd><kbd>--</kbd>10<kbd>--</kbd> <kbd>--</kbd><kbd>></kbd>

Конечно, это не совсем так просто, из-за различий в том, как каждый браузер выбирает интерпретацию спецификации.

Вот отличная статья, которая объясняет это:

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

Длинный ответ: почему мы ошибаемся

Большинство из нас, кто вырос с HTML (не углубляясь в SGML, лежащий в его основе), пришли к выводу, что строка <! - </kbd> начинается с комментария, а строка - -> заканчивает комментарий.

На самом деле <! </kbd> и > разграничивают декларацию SGML в вашем HTML-документе, такую ​​как декларация DOCTYPE, которую мы все видели в верхней части наших страниц. В пределах декларации SGML комментарии разделяются двойными черточками. Таким образом, HTML комментарий

<!-- this is a comment -->

, который, по мнению большинства из нас, анализируется следующим образом <! - </kbd> это комментарий -> фактически анализируется следующим образом:
<! </kbd> - это комментарий - > . Это пустая декларация SGML, за исключением комментария.

Поскольку HTML является формой SGML, этот «комментарий в объявлении» функционирует как комментарий HTML.

Из интереса, вот кусок чистого SGML, который показывает комментарии, функционирующие так, как они были предназначены в SGML: это определение списка атрибутов содержит комментарий в каждой строке:

<!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 --
>
91 голосов
/ 14 января 2009

Когда вы вкладываете комментарий, замените "-" на "- -". Когда вы снимаете гнездо, выполните обратную процедуру. Запрещается не <!--, а --.

Пример:

<!-- some stuff
<!- - some inner stuff - ->
<!- - a sibling - ->
the footer -->
8 голосов
/ 14 января 2009

Это невозможно сделать. --> всегда заканчивает существующий HTML-комментарий.

5 голосов
/ 03 мая 2018

Использовать тег 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.
4 голосов
/ 10 мая 2017

Если вы действительно застряли с каким-то фрагментом 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 в качестве оболочки, конечно, делая это таким образом, вы не можете закомментировать теги 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 голос
/ 14 января 2009

Некоторые редакторы имеют комментирующие / раскомментирующие команды, которые могут автоматически обрабатывать существующие комментарии в блоке текста. Visual Studio, например делает это, когда вы нажимаете Ctrl + KC и Ctrl + KU.

0 голосов
/ 25 апреля 2019

Надстройка VS, которая подделывает вложенные комментарии, автоматически преобразует <!--...--> в <!~~...~~>, а затем комментирует весь раздел. Позволяет включать и выключать его.

вложенные-комментарии

0 голосов
/ 02 ноября 2016

Попробуйте это

<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 голосов
/ 11 августа 2010

попробуйте использовать это

<!-- 

это начало комментария

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

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

--> конец комментариев.

0 голосов
/ 30 января 2009

Я думаю, что это не разрешено, но, насколько я знаю, это работает в большинстве основных браузеров, кроме Firefox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...