HTML中的标签/注释是否由浏览器自动更正?

3

代替

<!--  

,
I used

<!-

……并且它正在运作。

怎么做到的?

2个回答

5
它实际上并没有起作用-它只是将其解释为一个实际的标签,然后将该标签作为无效的标签丢弃。
<!- foo bar -->

被视为标签的内容<!-foo bar-->显然不是标准的HTML标签,因此会被忽略。

尝试一下,你会发现它并不能真正作为注释使用:

<!- >foo bar-->

这引出了另一个问题: 如果编译器/解释器无法读取注释, 我们如何测试它没有被读取(当然,就像我的例子中一样)? - Pop Stack

3
现代浏览器解析器(即使用HTML5解析算法的解析器)的工作方式如下。如果它们期望下一个字符是文本或新标签,并且它们看到<!,则会检查接下来的几个字符是否为--DOCTYPE,或者如果它们正在处理嵌入式SVG或MathML,则检查是否为[CDATA[。(请参见http://dev.w3.org/html5/spec/tokenization.html#markup-declaration-open-state
如果像<!- foo这样的情况没有匹配项,则解析器进入bogus comment state,其后面的所有字符,直到下一个>都被读取并转换为注释放入DOM中。
因此,你看到<!-的行为类似于注释开头。请注意,这种行为是针对损坏标记的“修复”行为,不要依赖它。
你可以在这里看到这种标记形成的DOM:实时DOM查看器 同时请注意,这与@Amber所说的不同。它并不被视为标签,也不会被忽略。

“Treated as a tag” 的意思是它被解析到下一个 >(这是标签的结束字符),而不是下一个 -->(这是注释的结束字符)。 “忽略” 的意思是它被用作注释,而不影响显示页面的文本。 - Amber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接