Apakah komentar HTML bertingkat mungkin?

96

sesuai judul; mungkinkah memiliki komentar bertingkat dalam HTML yang valid? lihat contoh di bawah ini ...

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

Tampaknya tidak, apakah ada yang tahu bagaimana saya bisa mendapatkan komentar bertingkat untuk bekerja?

QAZ
sumber
4
... atau menurut saya tidak mungkin, tetapi mungkin seseorang dengan pengalaman lebih dari saya akan mengetahuinya!
QAZ
Jika ragu tentang apa yang valid di HTML, saya biasanya langsung ke chase & go stringht ke standar guys. Secara khusus, Layanan Validasi Markup W3C di validator.w3.org
Mawg mengatakan memulihkan Monica

Jawaban:

103

Saat Anda menambahkan komentar, ganti "-" dengan "- -". Saat Anda melepas sarang, balikkan prosedurnya. Bukan <!--yang dilarang tapi-- .

Contoh:

<!-- some stuff
<!- - some inner stuff - ->
<!- - a sibling - ->
the footer -->
Aaron Digulla
sumber
4
Apakah ini berarti komentar batin bukan lagi komentar yang pantas?
S. Lott
10
Ya, HTML dan XML tidak mengizinkan komentar bersarang menggunakan <! -. Apa yang dapat Anda lakukan dalam kode Anda sendiri adalah menentukan elemen komentar dan mengabaikannya secara aktif selama penguraian.
Aaron Digulla
1
perhatikan bahwa Anda harus mengganti --dengan - - untuk komentar bagian dalam (bersarang) .
ebosi
3
Jika Anda mengubah "-" menjadi "- -" maka itu bukan lagi komentar. Ini bukan solusi, tetapi cara lain, Anda juga dapat menggunakan "<% - komentar Anda -%> untuk
mengetahui
Bagaimana ini disukai dan diterima sebagai jawaban terbaik? Ini bahkan tidak berhasil! Geesh. Silahkan baca penjelasan Dave Land di bawah ini.
John E
97

TL; DR : Sayangnya, tidak, itu tidak mungkin (dan tidak akan pernah).

Jawaban singkat:

Komentar HTML tidak seperti yang dipikirkan banyak orang. HTML adalah salah satu bentuk SGML, di mana komentar dipisahkan dengan sepasang tanda hubung ganda ( --… -- ).

Jadi, sepasang tanda hubung ganda di dalam sepasang tanda kurung siku dengan tanda seru setelah tanda kurung siku ( <! ---- >) adalah komentar. Spesifikasi mengatakan lebih baik daripada yang saya bisa: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

Inilah sebabnya mengapa komentar seperti ini (yang mungkin kita semua pernah lakukan satu kali atau yang lain) adalah ide yang buruk :

<! - ------------------ HEADER DIMULAI DI SINI -------------------- ->

Kebenaran: Saya terlalu malas untuk memberi tahu Anda berapa banyak komentar yang diwakili oleh polusi tag di atas, tetapi setidaknya 10.

Saya tidak terlalu malas: Yang disebut "komentar" ini sebenarnya terdiri dari 10 komentar, tiga kata di luar komentar (yaitu, SGML yang buruk), dan permulaan komentar yang tidak diakhiri. Ini benar-benar berantakan:

<!--1 ----2 ----3 ----4 ----5--
HEADER DIMULAI DI SINI
--6 ----7 ----8 ----9 ----10-- -->

Tentu saja, itu tidak cukup sederhana yang, karena perbedaan dalam bagaimana masing-masing lagi memilih browser untuk menafsirkan spec.

Inilah artikel bagus yang menjelaskannya:

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

Jawaban panjang: Mengapa kami salah

Sebagian besar dari kita yang tumbuh dengan HTML (tanpa mempelajari SGML yang mendasari itu)) menjadi percaya bahwa string <!--memulai sebuah komentar, dan string--> mengakhiri komentar.

Sebenarnya, <!dan >batasi deklarasi SGML dalam dokumen HTML Anda, seperti deklarasi DOCTYPE yang telah kita lihat di bagian atas halaman kita. Di dalam deklarasi SGML, komentar dipisahkan dengan tanda hubung ganda. Jadi, komentar HTML

<! - ini adalah komentar ->

yang sebagian besar dari kita akan percaya parsing seperti ini <!-- this is a comment -->sebenarnya diurai seperti ini:
<!-- this is a comment -->. Ini adalah deklarasi SGML yang kosong kecuali untuk komentar.

Karena HTML adalah bentuk SGML, "komentar-dalam-deklarasi" ini berfungsi sebagai komentar HTML.

Karena minat, berikut ini adalah potongan SGML murni yang menunjukkan komentar yang berfungsi sebagaimana mestinya di SGML: definisi daftar atribut ini berisi komentar di setiap baris:

<! TAUTAN ATTLIST
  % attrs; -% coreattrs,% i18n,% peristiwa -
  charset% Charset; # TERSIRAT -
  href% URI; #SIRAT - URI untuk sumber daya tertaut -
  hreflang% LanguageCode; # TERSIRAT - kode bahasa -
  ketik% ContentType; # TERSIRAT - jenis konten penasehat -
  rel% LinkTypes; # TERSIRAT - meneruskan jenis tautan -
  rev% LinkTypes; # TERSIRAT - tipe tautan terbalik -
  media% MediaDesc; # TERSIRAT - untuk merender di media ini -
>
Dave Land
sumber
1
Menarik. Saya ingin tahu apakah ini masih berlaku untuk penguraian html5.
Kzqai
1
Sayangnya, ya, itu masih benar, karena ini adalah bagian dari dasar SGML yang mendasari semua HTML, termasuk HTML5, didasarkan. Ini semua tidak mungkin untuk ini berubah.
Dave Land
8

Itu tidak bisa dilakukan. -->akan selalu mengakhiri komentar HTML yang ada.

Sergio
sumber
4
Bahasa pemrograman lain seperti LUA mengizinkannya. == [[dan == [1 [adalah awal dari dua blok komentar yang terpisah. Saya tidak melihat alasan mengapa suatu hari HTML tidak dapat melakukan hal yang sama.
john ktejik
7

Jika Anda benar-benar terjebak dengan beberapa bagian HTML - yang telah dirender sebelumnya di beberapa sumber yang tidak terkendali - yang berisi komentar, dan Anda perlu memastikan tidak ada yang dirender di halaman Anda, Anda selalu dapat membungkusnya dengan scripttag seperti di bawah ini, masalahnya adalah, Anda tidak dapat mengomentari scripttag dengan cara ini.

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

Jika Anda perlu mengomentari scripttag, Anda dapat menggunakan textareasebagai pembungkus, tentu saja melakukannya dengan cara ini, Anda tidak dapat mengomentari textareatag.

<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
sumber
1
Pintar! Tetapi apa yang harus dilakukan jika kode HTML sudah berisi tag <script> ...
Willem
3
@Willem, memperbarui jawaban dengan pendekatan tambahan yang mungkin berhasil dalam skenario Anda ..
Mathijs Flietstra
1
Terima kasih, itu cara yang baru. Mungkin Anda juga bisa membungkusnya di blok komentar JS:/* */
Willem
7

Gunakan templatetag. Cara tercepat untuk memblokir semua komentar dan html lain agar tidak muncul.

<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
sumber
The <template>elemen tidak bisa ditambahkan di mana saja. Elemen induknya harus berupa <body>elemen atau beberapa elemen lainnya .
John E
1

Beberapa editor memiliki perintah memberi komentar / tidak berkomentar yang secara otomatis dapat menangani komentar yang ada dalam blok teks. Misalnya Visual Studio melakukan itu ketika Anda menekan Ctrl + KC dan Ctrl + KU.

Dirk Vollmar
sumber
Saya mencoba apa yang Anda katakan untuk Ctrl + KC & Ctrl + KU untuk komentar html bersarang di VS2013, tapi sayangnya itu tidak menanganinya.
Mahdi Alkhatib
1

Add-in VS yang memalsukan komentar bertingkat dengan secara otomatis mengonversi <!--...-->untuk <!~~...~~>kemudian mengomentari seluruh bagian itu. Ini memungkinkan Anda mengaktifkan dan menonaktifkannya.

komentar bersarang

Paul Gorbas
sumber
0

Saya pikir itu tidak diperbolehkan, tetapi sejauh yang saya tahu ini berfungsi di sebagian besar browser utama kecuali di Firefox.

TheHippo
sumber
0

coba gunakan ini

<!-- 

ini adalah awal dari komentar

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

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

--> akhir komentar.

drw
sumber
0

Coba ini

<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
sumber
1
Bisakah Anda menjelaskan? Saya tidak mengetahui <comment>kata kunci dalam HTML
Mawg mengatakan memulihkan Monica