浏览器会自动更正 HTML 中的标签/注释吗?
Posted
技术标签:
【中文标题】浏览器会自动更正 HTML 中的标签/注释吗?【英文标题】:Are the tags/comments in HTML auto-corrected by browsers? 【发布时间】:2012-04-09 03:43:53 【问题描述】:代替
<!--
, 我用过
<!-
...它正在工作。
怎么做?
【问题讨论】:
【参考方案1】:它实际上并没有工作 - 它只是将它解释为一个实际的标签,然后将该标签作为无效标签丢弃。
<!- foo bar -->
被视为标签<!-foo bar-->
,它显然不是标准的html标签,因此被忽略。
试试这个,你会发现它并不能真正用作评论:
<!- >foo bar-->
【讨论】:
这就引出了另一个问题:如果编译器/解释器无法读取 cmets,我们如何测试它是否未被读取(当然,就像我的示例中一样)?【参考方案2】:现代浏览器解析器(即那些使用 HTML5 解析算法的)是这样工作的。如果他们接下来期待文本或新标签,并且他们看到 <!
,那么他们检查接下来的几个字符以查看它们是 --
还是 DOCTYPE
,或者,如果他们正在处理嵌入式 SVG 或 MathML,[CDATA[
. (见http://dev.w3.org/html5/spec/tokenization.html#markup-declaration-open-state)
如果在<!- foo
的情况下,这些都不匹配,则解析器输入bogus comment state,其中后面的所有字符,直到下一个>
,都被读取并转换为注释放入 DOM。
因此,您在 <!-
中看到的行为就像评论开始一样。请注意,此类行为是损坏标记的“修复”行为,明智的做法是不要依赖它。
您可以在此处查看此类标记如何形成 DOM:Live DOM Viewer
另请注意,这与@Amber 所说的不同。它不会被视为任何有意义的标签,当然也不会被忽略。
【讨论】:
"被视为标签",因为它被解析到下一个>
(这是标签的结束字符),而不是下一个 -->
(这是结束评论的字符)。 “忽略”是指它被用作评论,而不是影响显示页面的文本。以上是关于浏览器会自动更正 HTML 中的标签/注释吗?的主要内容,如果未能解决你的问题,请参考以下文章