중첩 된 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에서 무엇이 유효한지 의심 스러우면, 나는 보통 표준 사람들에게 쫓기고 갈 것입니다. 특히 validator.w3.org
Mawg는 Monica를

답변:


103

주석을 중첩 할 때 "-"를 "--"로 바꾸십시오. 중첩을 해제 할 때 절차를 반대로 수행하십시오. 그것은 아니다 <!--금지된다하지만 --.

예:

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

4
이것은 내부 댓글이 더 이상 적절한 댓글이 아님을 의미합니까?
S.Lott

10
예, HTML 및 XML에서는 <!-를 사용하여 주석을 중첩 할 수 없습니다. 자신의 코드에서 할 수있는 일은 주석 요소를 정의하고 구문 분석 중에 적극적으로 무시하는 것입니다.
Aaron Digulla

1
당신은 대체 해주십시오 --- - 내부 (중첩) 코멘트 .
ebosi

3
"-"를 "--"로 변경하면 더 이상 주석이 아닙니다. 주위에 방법 것은 <% - - 귀하의 코멘트 %> "당신은 또한 사용할 수있는 솔루션이지만 주위에 방법이 아니다.
아난 싱

이 답변이 어떻게 찬성되고 우수 답변으로 받아 들여 졌나요? 작동하지 않습니다! 이런. 아래 Dave Land의 설명을 읽으 십시오.
John E

97

TL; DR : 안타깝게도 불가능합니다. 불가능합니다.

짧은 답변:

HTML 주석은 많은 사람들이 생각하는 것과 다릅니다. HTML은 주석이 이중 대시 쌍 ( --…  --) 으로 구분되는 SGML의 한 형태입니다 .

따라서 여는 괄호 ( <! ---- >) 뒤에 느낌표가있는 한 쌍의 꺾쇠 괄호 안에있는 이중 대시 쌍은 주석입니다. 사양은 내가 할 수있는 것보다 낫다고 말합니다 : http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

이것이 바로 다음과 같은 주석 (우리 모두가 한 번 이상 수행했을 가능성이 있음)이 나쁜 생각 인 이유입니다 .

<!------------------- 여기에서 시작되는 헤더 --------------------->

진실 : 위의 태그 오염으로 표현되는 댓글 수를 말하기에는 너무 게으르지 만 적어도 10 개입니다.

나는 덜 게으르다. 소위 "주석"은 실제로 10 개의 주석, 주석 외부에있는 3 개의 단어 (즉, 잘못된 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을 조사하지 않고) .

사실, <!그리고 >그러한 우리는 우리의 모든 페이지의 상단에 본 적이 DOCTYPE 선언으로 HTML 문서, 내 SGML 선언을 구분합니다. SGML 선언 에서 주석은 이중 대시로 구분됩니다. 따라서 HTML 주석

<!-이것은 주석입니다->

우리 중 대부분은 이것이 <!-- this is a comment -->실제로 다음과 같이 구문 분석
<!-- this is a comment -->됩니다. 주석을 제외하고는 비어있는 SGML 선언입니다.

HTML은 SGML의 한 형태이므로이 "선언 내 주석"은 HTML 주석으로 작동합니다.

흥미로운 점은 SGML에서 의도 한대로 작동하는 주석을 보여주는 순수 SGML 청크입니다.이 속성 목록 정의에는 각 줄에 주석이 포함되어 있습니다.

<! ATTLIST 링크
  % attrs; -% coreattrs, % i18n, % events-
  문자셋 % Charset; #IMPLIED-연결된 리소스의 문자 인코딩-
  href % URI; #IMPLIED-연결된 리소스의 URI-
  hreflang % LanguageCode; #IMPLIED-언어 코드-
  % ContentType 유형; #IMPLIED-자문 콘텐츠 유형-
  rel % LinkTypes; #IMPLIED-정방향 링크 유형-
  rev % LinkTypes; #IMPLIED-역방향 링크 유형-
  미디어 % MediaDesc; #IMPLIED-이러한 미디어에서 렌더링하는 경우-
>

1
흥미 롭군. 이것이 여전히 html5 구문 분석에 해당하는지 궁금합니다.
Kzqai

1
안타깝게도 그렇습니다. HTML5를 포함한 모든 HTML의 기반이되는 기본 SGML 기반의 일부이기 때문에 여전히 사실입니다. 이것이 변경되는 것은 거의 불가능합니다.
Dave Land

8

할 수 없습니다. -->항상 기존 HTML 주석을 끝냅니다.


4
LUA와 같은 다른 프로그래밍 언어는이를 허용합니다. == [[및 == [1 [은 두 개의 개별 주석 블록의 시작입니다. 언젠가 HTML이 똑같은 일을 할 수없는 이유가 전혀 없습니다.
john ktejik 2014

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대신 as 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
@Willem, 귀하의 시나리오에서 작동 할 수있는 추가 접근 방식으로 답변을 업데이트했습니다.
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를 누를 때이를 수행합니다.


VS2013에서 중첩 된 html 주석에 대해 Ctrl + KC 및 Ctrl + KU에 대해 말한 것을 시도하고 있지만 불행히도 처리하지 않습니다.
Mahdi Alkhatib 2015 년

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는 분석 재개 모니카 말한다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.