สามารถแสดงความคิดเห็น HTML ที่ซ้อนกันได้หรือไม่


97

ตามชื่อเรื่อง; เป็นไปได้ไหมที่จะมีความคิดเห็นซ้อนกันใน 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 ฉันมักจะตัดไปที่การไล่ล่า & ไปที่คนมาตรฐาน โดยเฉพาะบริการตรวจสอบความ
Mawg กล่าวว่าคืนสถานะ Monica

คำตอบ:


107

เมื่อคุณซ้อนความคิดเห็นให้แทนที่ "-" ด้วย "- -" เมื่อคุณยกเลิกการทำรังให้ย้อนกลับขั้นตอน ไม่ใช่สิ่ง<!--ที่ต้องห้าม แต่เป็น--.

ตัวอย่าง:

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

4
หมายความว่าความคิดเห็นภายในไม่ใช่ความคิดเห็นที่ถูกต้องอีกต่อไปหรือไม่?
ล็อต

10
ใช่ HTML และ XML ไม่อนุญาตให้ซ้อนความคิดเห็นโดยใช้ <! - สิ่งที่คุณสามารถทำได้ในโค้ดของคุณคือกำหนดองค์ประกอบความคิดเห็นและเพิกเฉยต่อมันอย่างกระตือรือร้นในระหว่างการแยกวิเคราะห์
Aaron Digulla

1
โปรดทราบว่าคุณควรเปลี่ยน--ด้วย- - สำหรับภายใน (ซ้อน) แสดงความคิดเห็น
ebosi

3
หากคุณเปลี่ยน "-" เป็น "- -" จะไม่ใช่ความคิดเห็นอีกต่อไป ไม่ใช่วิธีแก้ปัญหา แต่เป็นวิธีแก้ปัญหาคุณยังสามารถใช้ "<% - ความคิดเห็นของคุณ -%> เป็นแนวทางได้
Anant Singh

วิธีนี้ได้รับการโหวตและยอมรับว่าเป็นคำตอบที่ดีที่สุด? มันไม่ได้ผล! กีช. โปรดอ่านคำอธิบายของ Dave Landด้านล่าง
John E

99

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 ฟังก์ชัน "comment-within-a-declaration" จึงเป็นข้อคิดเห็น HTML

สิ่งที่น่าสนใจนี่คือ SGML บริสุทธิ์ที่แสดงความคิดเห็นที่ทำงานตามที่ตั้งใจไว้ใน SGML: คำจำกัดความรายการแอตทริบิวต์นี้ประกอบด้วยข้อคิดเห็นในแต่ละบรรทัด:

<! ATTLIST LINK
  % attrs; -% coreattrs,% i18n,% เหตุการณ์ -
  ตัวอักษร% Charset; #IMPLIED - การเข้ารหัสถ่านของทรัพยากรที่เชื่อมโยง -
  href% URI; #IMPLIED - URI สำหรับทรัพยากรที่เชื่อมโยง -
  hreflang% LanguageCode; #IMPLIED - รหัสภาษา -
  พิมพ์% ContentType; #IMPLIED - ประเภทเนื้อหาคำแนะนำ -
  rel% LinkTypes; #IMPLIED - ประเภทลิงก์ไปข้างหน้า -
  rev% LinkTypes; #IMPLIED - ประเภทลิงก์ย้อนกลับ -
  สื่อ% MediaDesc; #IMPLIED - สำหรับการแสดงผลบนสื่อเหล่านี้ -
>

1
น่าสนใจ. ฉันสงสัยว่านี่ยังคงเป็นจริงของการแยกวิเคราะห์ html5 หรือไม่
Kzqai

1
น่าเสียดายที่ใช่มันยังคงเป็นความจริงเนื่องจากเป็นส่วนหนึ่งของพื้นฐานของ SGML ที่อ้างอิง HTML ทั้งหมดรวมถึง HTML5 ทั้งหมดนี้เป็นไปไม่ได้เลยที่จะเปลี่ยนแปลง
Dave Land

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แท็กคุณสามารถใช้textareaas wrapper แทนได้หากทำเช่นนี้คุณจะไม่สามารถแสดงความคิดเห็นใน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> อยู่แล้ว ...
Willem

3
@ วิลเลมอัปเดตคำตอบพร้อมแนวทางเพิ่มเติมที่อาจใช้ได้ในสถานการณ์ของคุณ ..
Mathijs Flietstra

1
ขอบคุณนั่นเป็นวิธีที่แปลกใหม่ บางทีคุณอาจรวมสิ่งนี้ไว้ในบล็อกความคิดเห็น JS:/* */
Willem

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>องค์ประกอบหรือองค์ประกอบอื่น ๆ ที่เลือกไว้
John E

1

บรรณาธิการบางคนมีคำสั่งแสดงความคิดเห็น / ไม่แสดงความคิดเห็นซึ่งสามารถจัดการกับความคิดเห็นที่มีอยู่โดยอัตโนมัติในบล็อกข้อความ Visual Studio เช่นเมื่อคุณกด Ctrl + KC และ Ctrl + KU


ฉันกำลังลองสิ่งที่คุณพูดสำหรับ Ctrl + KC & Ctrl + KU สำหรับความคิดเห็น html ที่ซ้อนกันใน VS2013 แต่น่าเสียดายที่ไม่สามารถจัดการได้
Mahdi Alkhatib


0

ฉันคิดว่ามันไม่ได้รับอนุญาต แต่เท่าที่ฉันรู้ว่ามันใช้ได้กับเบราว์เซอร์หลัก ๆ ส่วนใหญ่ยกเว้นใน Firefox


0

ลองใช้สิ่งนี้

<!-- 

นี่คือจุดเริ่มต้นของความคิดเห็น

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

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

--> สิ้นสุดความคิดเห็น


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.