1
4

2 回答 2

4

实际的问题应该是,您为什么要故意向浏览器提供无效的 HTML?

但回到主题。从历史上看,HTML 一直是一种生涩的标记语言。没有 DOM 概念的人会编写 HTML,例如:

<B><U>hi, </B> shall I be underlined or not?</U>

以上显然是无效的 HTML。但是,如果您使用无效的 HTML 输入浏览器,浏览器不会呕吐。它将尝试以作者认为的方式恢复文档。

DOM 中的元素(这是检查器向您显示的)只能有一个父元素。所以从逻辑上讲,<U>必须在关闭之前<B>关闭。但是<U>作者没有关闭,所以浏览器认为其余的文本也应该加下划线。因此,无效的 HTML 被恢复为大致如下的 DOM 结构:

<B><U>hi, </U></B><U> shall I be underlined or not?</U>

在您的特定情况下,<a>标签不能在 HTML 中自行关闭,因此:

<a>...<a/>

/解释为语法糖,浏览器认为您打开了第二个<a>元素而没有关闭第一个元素。它很可能会在整个文档中生成锚元素,直到</a>在恢复过程中遇到必要的关闭。

于 2013-11-02T01:21:44.363 回答
2

两件事情:

  1. <a/>可能会被解释为自闭锚标签的尝试,所以实际上是一个新的锚
  2. 嵌套锚是非法的,因此浏览器会在打开第二个之前关闭第一个。

但是,我没有证据证明这一点,这几乎是一个猜测。


更多猜测:这可能是一种依赖于浏览器的行为,并且与浏览器自动<tbody>在表格中创建标签的原因有关。他们只是已经知道,如果没有<thead>,网站作者打算使用<tbody>.

所以一旦自闭<a/>出现,就结束了未闭的锚,开始了新的锚。虽然因为<a>它是一个容器,但它不能自我终止。然后锚将根据 XHTML 规则结束,即在容器之前关闭包含的标签。

这将需要对 HTML 规范和个别浏览器行为进行大量查询。

于 2013-11-02T01:14:50.277 回答