注释是否可以嵌套html,关于验证:嵌套的HTML注释是否可行?

根据标题; 是否可以在有效的HTML中嵌套注释? 看下面的例子......

some text

more commented out html

end of comment 1 -->

some more text

看来不是,有人知道如何让嵌套注释工作吗?

......或者我认为不可能,但也许比我更有经验的人会知道!

如果对HTML中的有效内容有疑问,我通常会切入追逐标准人员的角色。 具体来说,是validator.w3.org上的W3C标记验证服务

TL; DR:不幸的是,不,这是不可能的(而且永远不会)。

简短回答:

HTML评论并不是很多人认为的。 HTML是SGML的一种形式,其中注释由双短划线(- ... -)分隔。

因此,在开口括号(-?- >)之后的一对尖括号内的任何一对双短划线都带有感叹号。该规范说它比我更好:http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

这就是为什么这样的评论(我们可能已经做过一次或另一次)是一个坏主意:

真相:我太懒了,不能告诉你上面的标签污染代表了多少评论,但它至少是10。

I got less lazy: This so-called"comment" actually consists of 10 comments,

three words outside any comment (i.e., just bad SGML), and the

beginning of a comment that is not terminated. It's a real mess:

--1----2----3----4----5--

HEADER BEGINS HERE

--6----7----8----9----10-- -->

当然,由于每个浏览器选择如何解释规范的差异,它并不那么简单。

这是一篇很好的文章解释它:

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

答案很长:为什么我们弄错了

我们大多数用HTML长大的人(没有深入研究它的SGML))已经开始相信字符串开始发表评论,字符串- >结束评论。

实际上,和>在HTML文档中划分了一个SGML声明,例如我们在页面顶部看到的DOCTYPE声明。在SGML声明中,注释由双短划线分隔。因此,HTML评论

我们大多数人都会相信解析像这样这是一个注释- >实际上解析如下:

- this是comment ->。除了注释之外,它是一个空的SGML声明。

因为HTML是SGML的一种形式,所以这种"声明中的注释"用作HTML注释。

出于兴趣,这里有一大块纯SGML,它显示注释在SGML中的作用:这个属性列表定义包含对每一行的注释:

%attrs;                              -- %coreattrs, %i18n, %events --

charset     %Charset;      #IMPLIED  -- char encoding of linked resource --

href        %URI;          #IMPLIED  -- URI for linked resource --

hreflang    %LanguageCode; #IMPLIED  -- language code --

type        %ContentType;  #IMPLIED  -- advisory content type --

rel         %LinkTypes;    #IMPLIED  -- forward link types --

rev         %LinkTypes;    #IMPLIED  -- reverse link types --

media       %MediaDesc;    #IMPLIED  -- for rendering on these media --

>

有趣。我想知道html5解析是否仍然如此。

不幸的是,它仍然是正确的,因为它是所有HTML(包括HTML5)所基于的底层SGML基础的一部分。这种情况几乎不可能改变。

嵌套注释时,将" -"替换为" - -"。取消嵌套时,请反转该过程。它不是将始终结束现有的HTML评论。

其他编程语言如LUA允许它。 == [[和== [1 [是两个单独评论块的开头。我认为没有理由为什么有一天HTML不会做同样的事情。

使用template标签。阻止所有评论和其他HTML显示的最快方法。

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.

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.

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.

元素不能只添加到任何地方。它的父元素必须是元素或少数选择其他元素。

如果你真的遇到了一些HTML - 在一些无法控制的源上预渲染 - 它包含注释,你需要确保它们都没有在你的页面上呈现,你总是可以用script标签包装它如下所示,唯一的事情就是,你不能用这种方式注释掉script标签。

some text

commented out html

more commented out html

some more text

如果你需要注释掉script标签,你可以使用textarea代替包装,当然这样做,你不能注释掉textarea标签。

some text

alert("which won't show up..");

commented out html

more commented out html

some more text

聪明!但是如果HTML代码已经包含标签该怎么办...

@Willem,使用可能适用于您的场景的其他方法更新答案。

谢谢,这是一种新颖的方式。也许你也可以将这个东西包装在JS注释块中:/* */

一些编辑器具有注释/取消注释命令,这些命令可以自动处理文本块中的现有注释。 Visual Studio,例如当您按Ctrl + KC和Ctrl + KU时,这样做。

我正在尝试对VS2013中的嵌套html注释执行Ctrl + KC和Ctrl + KU所说的内容,但不幸的是它没有处理它。

一个VS加载项,通过自动将转换为来伪造嵌套注释,然后注释掉整个部分。它允许您打开和关闭它。

嵌套评论

试试这个

some text

comment 1

commented out html

more commented out html

end of comment 1

some more text

你可以解释吗?我不知道HTML中的关键字

尝试使用这个

评论结束。

我认为这是不允许的,但据我所知,除了Firefox之外,它在大多数主流浏览器中都有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值