Чи можливі вкладені коментарі 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, я, як правило, переслідую і переходжу до стандартних хлопців. Зокрема, служба перевірки розмітки W3C за адресою validator.w3.org
Mawg повідомляє відновити Моніку

Відповіді:


103

Коли ви вкладете коментар, замініть "-" на "- -". Коли ви гніздитесь, відмініть процедуру. <!--Заборонено не те, а --.

Приклад:

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

4
Чи означає це, що внутрішній коментар більше не є належним коментарем?
S.Lott

10
Так, HTML і XML не дозволяють вкладати коментарі за допомогою <! -. Що ви можете зробити у власному коді, це визначити елемент коментаря та активно ігнорувати його під час аналізу.
Аарон Дігулла

1
зауважте, що слід замінити --на - - для внутрішнього (вкладеного) коментаря .
ebosi

3
Якщо ви зміните "-" на "- -", це більше не буде коментарем. Це не рішення, а спосіб обійти, ви також можете використовувати "<% - ваш коментар -%> для
обіходу

Як це було проголосовано та прийнято як найкраща відповідь? Це навіть не працює! Геєш. Будь ласка, прочитайте пояснення Дейва Ленда нижче.
Джон Е,

97

TL; DR : На жаль, ні, це неможливо (і ніколи не буде).

Коротка відповідь:

Коментар у форматі HTML - це не зовсім те, що багато хто думає. HTML - це форма SGML, в якій коментарі розмежовані парами подвійних тире ( --... -- ).

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

Ось чому коментарі, подібні до цього (що ми всі, мабуть, робили раз чи інший), є поганою ідеєю:

<! - ------------------ ГОЛОВА ПОЧИНАЄТЬСЯ ТУТ -------------------- ->

Правда: Мені лінь сказати вам, скільки коментарів представлено вищезазначеним забрудненням тегів, але це принаймні 10.

Мені стало менш лінь: Цей так званий "коментар" насправді складається з 10 коментарів, трьох слів поза будь-яким коментарем (тобто просто поганим 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, який лежить в основі), повірили, що рядок <!--починає коментар, а рядок -->закінчує коментар.

Власне, <!і >розмежуйте декларацію SGML у вашому HTML-документі, наприклад, DOCTYPE, який ми всі бачили у верхній частині наших сторінок. У декларації SGML коментарі розмежовуються подвійними тиреми. Таким чином, коментар HTML

<! - це коментар ->

який більшість з нас вважають , аналізується , як це <!-- this is a comment -->насправді розбирається , як це:
<!-- this is a comment -->. Це декларація SGML, яка є порожньою, за винятком коментаря.

Оскільки HTML є формою SGML, це "коментар в межах декларації" функціонує як коментар HTML.

Нецікаво, ось фрагмент чистого SGML, який показує коментарі, які функціонують так, як вони були призначені в SGML: це визначення списку атрибутів містить коментар до кожного рядка:

<! СПИСОК АТЛІСТА
  % attrs; -% coreattreat,% i18n,% подій -
  charset% Charset; #IMPLIED - кодування символу пов'язаного ресурсу -
  href% URI; #IMPLIED - URI для пов'язаного ресурсу -
  hreflang% LanguageCode; #IMPLIED - код мови -
  введіть% ContentType; # IMPLIED - тип довідкового вмісту -
  rel% LinkTypes; # IMPLIED - типи прямих посилань -
  rev% LinkTypes; #IMPLIED - типи зворотних посилань -
  media% MediaDesc; #IMPLIED - для візуалізації на цих носіях -
>

1
Цікаво. Цікаво, чи все-таки це стосується розбору html5.
Kzqai

1
На жаль, так, це все ще правда, тому що це частина основних основ SGML, на яких базується весь HTML, включаючи HTML5. Це майже все неможливо.
Дейв Ленд

8

Це неможливо зробити. -->завжди закінчуватиме наявний коментар HTML.


4
Інші мови програмування, такі як LUA, це дозволяють. == [[і == [1 [є початком двох окремих блоків коментарів. Я не бачу причин, чому колись HTML не міг би зробити те саме.
John ktejik

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замість цього використовувати оболонку, звичайно, роблячи це таким чином, ви не можете коментувати 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> ...
Віллем,

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>елементом, або декількома виділеними іншими .
Іван Е

1

Деякі редактори мають команди для коментування / коментування, які можуть автоматично обробляти наявні коментарі в текстовому блоці. Visual Studio, наприклад, робить це при натисканні клавіш Ctrl + KC і Ctrl + KU.


Я намагаюся сказати, що ви сказали для Ctrl + KC & Ctrl + KU для вкладених коментарів html у VS2013, але, на жаль, це не обробляє.
Махді Алхатіб

1

Додаток VS, яке підробляє вкладені коментарі, автоматично перетворюється <!--...-->на <!~~...~~>коментарі з цього розділу. Це дозволяє вам вмикати та вимикати його.

вкладені коментарі


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 каже відновити Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.