Yuvalanmış HTML yorumları mümkün mü?


97

başlığa göre; geçerli HTML'de iç içe yorumların olması mümkün mü? aşağıdaki örneğe bakın ...

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

Görünüşe göre iç içe yorumların işe yaramasını nasıl sağlayabileceğimi bilen var mı?


4
... ya da mümkün olduğunu sanmıyorum ama belki benden daha fazla deneyime sahip biri bilecek!
QAZ

HTML'de neyin geçerli olduğu konusunda şüphe duyuyorsanız, genellikle takip edip standartlara uyuyorum çocuklar. Özellikle, validator.w3.org
Mawg, Monica'nın

Yanıtlar:


105

Bir yorumu iç içe yerleştirdiğinizde, "-" yerine "- -" yazın. Yuvayı açtığınızda, prosedürü tersine çevirin. O değil <!--yasak olduğunu ancak --.

Misal:

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

4
Bu, iç yorumun artık uygun bir yorum olmadığı anlamına mı geliyor?
S.Lott

10
Evet, HTML ve XML yorumların <! - kullanılarak iç içe yerleştirilmesine izin vermez. Kendi kodunuzda yapabileceğiniz şey, bir açıklama öğesini tanımlamak ve ayrıştırma sırasında onu aktif olarak yok saymaktır.
Aaron Digulla 14/09

1
iç (iç içe) açıklama için-- ile değiştirmeniz gerektiğini unutmayın . - -
ebosi

3
"-" öğesini "- -" olarak değiştirirseniz, bu artık bir yorum değildir. Bu bir çözüm değil, ancak bir yol olarak, "<% - yorumunuz -%> 'yi de kullanabilirsiniz.
Anant Singh

Bu nasıl olumlu oy verildi ve en iyi cevap olarak kabul edildi? Çalışmıyor bile! Geesh. Lütfen aşağıdaki Dave Land'in açıklamasını okuyun .
John E

98

TL; DR : Maalesef hayır, bu mümkün değil (ve asla olmayacak).

Kısa cevap:

Bir HTML yorumu pek çok kişinin sandığı gibi değildir. HTML, yorumların çift tire ( --…  --) çiftleriyle sınırlandırıldığı bir SGML biçimidir .

Bu nedenle, açılı parantezin ( <! ---- >) ardından ünlem işaretli bir çift köşeli parantez içindeki herhangi bir çift çizgi bir yorumdur. Spesifikasyon, yapabileceğimden daha iyi olduğunu söylüyor: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

(Biz ettik bunun gibi yapılan yorumlar nedeni budur tüm olasılıkla bir kez ya da başka bitmiş) bir olan kötü bir fikir:

<! - ------------------ BAŞLIK BURADA BAŞLIYOR -------------------- ->

Gerçek: Size yukarıdaki etiket kirliliği tarafından kaç yorumun temsil edildiğini söyleyemeyecek kadar tembelim, ancak en az 10'dur.

Daha az tembelleştim: Bu sözde "yorum" aslında 10 yorumdan, herhangi bir yorumun dışındaki üç kelimeden (yani, sadece kötü SGML) ve sonlandırılmamış bir yorumun başlangıcından oluşur. Bu gerçek bir karmaşa:

<!--1 ----2 ----3 ----4 ----5--
HEADER BURADA BAŞLIYOR
--6 ----7 ----8 ----9 ----10-- -->

Tabii ki, o değil oldukça nedeniyle her tarayıcı seçer spec nasıl yorumlanacağı farklılıklar, bu kadar basit.

İşte bunu açıklayan mükemmel bir makale:

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

Uzun cevap: Neden yanlış anlıyoruz

HTML ile büyüyen çoğumuz (altında yatan SGML'ye girmeden) dizenin <!--bir yorum başlattığına ve dizenin bir yorumu -->bitirdiğine inanmaya başladık .

Aslında <!ve >hepimizin sayfalarımızın başında gördüğümüz DOCTYPE beyanı gibi HTML belgenizdeki bir SGML bildirimini sınırlandırın. İçinde bir SGML bildirimi, yorum çift tire sınırlandırılır. Böylece, HTML yorumu

<! - bu bir yorumdur ->

Böyle çoğumuz inanmazdı hangi ayrıştırılır <!-- this is a comment -->aslında böyle çözümlenir:
<!-- this is a comment -->. Yorum dışında boş olan bir SGML beyanıdır.

HTML, SGML'nin bir biçimi olduğu için, bu "açıklama içinde açıklama" bir HTML açıklaması olarak işlev görür.

İlgi çekici olmayan bir şekilde, SGML'de amaçlandığı gibi işleyen yorumları gösteren bir parça saf SGML: bu özellik listesi tanımı her satıra bir yorum içerir:

<! ATTLIST BAĞLANTISI
  % attrs; -% coreattrs,% i18n,% olaylar -
  karakter kümesi% Charset; #IMPLIED - bağlantılı kaynağın karakter kodlaması -
  href% URI; #IMPLIED - bağlantılı kaynak için URI -
  hreflang% LanguageCode; #IMPLIED - dil kodu -
  % ContentType yazın; #IMPLIED - tavsiye içerik türü -
  rel% LinkTypes; #IMPLIED - ileri bağlantı türleri -
  rev% LinkTypes; #IMPLIED - ters bağlantı türleri -
  media% MediaDesc; #IMPLIED - bu ortamlarda işlemek için -
>

1
İlginç. Bunun html5 ayrıştırması için hala geçerli olup olmadığını merak ediyorum.
Kzqai

1
Ne yazık ki, evet, yine de doğrudur, çünkü HTML5 dahil tüm HTML'nin dayandığı temel SGML temellerinin bir parçasıdır. Bunun değişmesi neredeyse imkansızdır.
Dave Land

8

Bu yapılamaz. -->her zaman mevcut bir HTML yorumunu sonlandırır.


4
LUA gibi diğer programlama dilleri buna izin verir. == [[ve == [1 [iki ayrı yorum bloğunun başlangıcıdır. HTML'nin bir gün aynı şeyi yapmaması için hiçbir neden göremiyorum.
john ktejik

7

Yorumların bulunduğu kontrol edilemeyen bir kaynakta önceden oluşturulmuş bir HTML parçasına gerçekten takıldıysanız ve hiçbirinin sayfanızda görüntülenmediğinden emin olmanız gerekiyorsa, her zaman scriptaşağıdaki gibi bir etiketle sarmalayabilirsiniz , tek şey, scriptetiketleri bu şekilde yorumlayamazsınız .

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

scriptEtiketleri yorumlamanız gerekiyorsa , textareabunun yerine bir sarmalayıcı kullanabilirsiniz , tabii ki bunu bu şekilde yaparak textareaetiketleri yorumlayamazsınız .

<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
Zekice! Ama HTML kodu zaten <script> etiketleri içeriyorsa ne yapmalı ...
Willem

3
@Willem, senaryonuzda işe yarayabilecek ek bir yaklaşımla yanıtı güncelledi.
Mathijs Flietstra

1
Teşekkürler, bu yeni bir yol. Belki bunu JS yorum bloklarına da sarabilirsiniz:/* */
Willem

7

templateEtiketi kullanın . Tüm yorumların ve diğer html'lerin görünmesini engellemenin en hızlı yolu.

<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>Eleman sadece her yerde eklenemez. Üst öğesi, <body>öğe veya birkaç kişi seçilmelidir .
John E

1

Bazı düzenleyiciler, bir metin bloğundaki mevcut yorumları otomatik olarak işleyebilen yorum yapma / yorum kaldırma komutlarına sahiptir. Visual Studio, örneğin Ctrl + KC ve Ctrl + KU tuşlarına bastığınızda bunu yapıyor.


VS2013'teki iç içe geçmiş html yorumları için Ctrl + KC & Ctrl + KU için söylediklerinizi deniyorum, ancak maalesef bunu işlemiyor.
Mahdi Alkhatib

1

Yuvalanmış yorumları taklit eden bir VS eklentisi, otomatik olarak dönüştürür <!--...-->ve <!~~...~~>ardından tüm bölüme yorum yapar. Açıp kapatmanıza izin verir.

yuvalanmış yorumlar


0

Buna izin verilmediğini düşünüyorum, ancak bildiğim kadarıyla Firefox hariç büyük tarayıcıların çoğunda çalışıyor.


0

bunu kullanmayı dene

<!-- 

bu yorumun başlangıcı

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

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

--> yorumların sonu.


0

Bunu dene

<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
Açıklayabilir misin? <comment>HTML'deki bir anahtar kelimeden haberdar
değildim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.