浏览器会自动更正 HTML 中的标签/注释吗?

Posted

技术标签:

【中文标题】浏览器会自动更正 HTML 中的标签/注释吗?【英文标题】:Are the tags/comments in HTML auto-corrected by browsers? 【发布时间】:2012-04-09 03:43:53 【问题描述】:

代替

<!--  

, 我用过

<!-

...它正在工作。

怎么做?

【问题讨论】:

【参考方案1】:

它实际上并没有工作 - 它只是将它解释为一个实际的标签,然后将该标签作为无效标签丢弃。

<!- foo bar -->

被视为标签&lt;!-foo bar--&gt;,它显然不是标准的html标签,因此被忽略。

试试这个,你会发现它并不能真正用作评论:

<!- >foo bar-->

【讨论】:

这就引出了另一个问题:如果编译器/解释器无法读取 cmets,我们如何测试它是否未被读取(当然,就像我的示例中一样)?【参考方案2】:

现代浏览器解析器(即那些使用 HTML5 解析算法的)是这样工作的。如果他们接下来期待文本或新标签,并且他们看到 &lt;!,那么他们检查接下来的几个字符以查看它们是 -- 还是 DOCTYPE,或者,如果他们正在处理嵌入式 SVG 或 MathML,[CDATA[ . (见http://dev.w3.org/html5/spec/tokenization.html#markup-declaration-open-state)

如果在&lt;!- foo 的情况下,这些都不匹配,则解析器输入bogus comment state,其中后面的所有字符,直到下一个&gt;,都被读取并转换为注释放入 DOM。

因此,您在 &lt;!- 中看到的行为就像评论开始一样。请注意,此类行为是损坏标记的“修复”行为,明智的做法是不要依赖它。

您可以在此处查看此类标记如何形成 DOM:Live DOM Viewer

另请注意,这与@Amber 所说的不同。它不会被视为任何有意义的标签,当然也不会被忽略。

【讨论】:

"被视为标签",因为它被解析到下一个 &gt;(这是标签的结束字符),而不是下一个 --&gt;(这是结束评论的字符)。 “忽略”是指它被用作评论,而不是影响显示页面的文本。

以上是关于浏览器会自动更正 HTML 中的标签/注释吗?的主要内容,如果未能解决你的问题,请参考以下文章

HTML学习标题水平线注释

HTML学习二(基础)

table中的th标签

html5 global对象中都有哪些常用方法

html5如何实现自动播放视频

如果使用标签,浏览器会拒绝非数字输入吗?