【问题标题】:Loading DOM from HTML: How does a HTML parser know when empty element ends从 HTML 加载 DOM:HTML 解析器如何知道空元素何时结束
【发布时间】:2015-10-22 21:17:59
【问题描述】:

在 XML 中,空元素有一个相应的标记为 />。但这在 HTML 中不存在。 HTML 解析器也有一个有限的可以为空的元素列表。如果这样的元素有结束标签怎么办?

【问题讨论】:

  • 这在HTML5 ('living') specification中有记录;有点乏味,但都在那里。还要注意一些元素,例如。 BR 有“无内容”,这与“空内容”不同。
  • @user2864740 "如果 thead 元素后面紧跟一个 tbody 或 tfoot 元素,则可以省略该元素的结束标记。"嗯,这比元素列表更糟糕。

标签: html html-parsing


【解决方案1】:

html中的标签有一个结束标签,一个没有结束标签。而且在引入HTML5之后更加混乱。经过大量研究,这是我迄今为止发现的。我希望你会明白:)

HTML 解析器是否有一个可以为空的有限元素列表。

答案:是的,HTML 解析器有有限的空元素列表。解析器有一定的解析规则,会忽略空标签。

这些是可以为空的元素。 (来源:-Mozilla documentation

<link>
<track>
<param>
<area>
<command>
<col>
<base>
<meta>
<hr>
<source>
<img>
<keygen>
<br>
<wbr>
<colgroup> when the span is present
<input>

在 HTML 中,在空元素上使用结束标记是无效的。例如,&lt;input type="text"&gt;&lt;/input&gt; 是无效的 HTML,解析器将忽略这些标签。

“空元素(void elements)”被错误地引入HTML:presentational 标记悄悄进入语言,违背了 SGML 的精神,并且 带有一些奇怪的句法含义。这个基本错误已经 导致了一些技术问题,例如之间的意外差异 HTML 和 XHTML,在验证中引起意外。更重要的是,它 说明了正式制作 HTML 的决定的含义, 并且只是形式上的“SGML 应用程序”。 “空元素”更多 比他们看起来的样子。

来源(值得一读):cs.tut.fi empty elements research paper

如果这样的元素有结束标签怎么办?

解析器将忽略具有结束标记的元素,并使用下一个元素或字符进行解析。并且解析器会抛出一个被忽略的语法错误

阅读这篇 w3c 文章,它是关于 HTML 空元素(void elements)W3C Link

456bereastreet关于空元素的文章

关于空元素的彩色眩光文章Colorglare link

【讨论】:

    【解决方案2】:

    HTML 解析器也有一个可以为空的有限元素列表。

    是的。 HTML 解析器知道 HTML 的规则,这些规则说明哪些元素没有结束标记(或可选的结束标记)。

    例如:

    标签名称为以下之一的开始标签:“area”、“br”、“embed”、“img”、“keygen”、“wbr”
    ...
    为令牌插入一个 HTML 元素。立即将当前节点从打开的元素堆栈中弹出。


    如果这样的元素有结束标签怎么办?

    然后它是无效的,并且 - 就像任何其他未打开标签的结束标签一样 - 当解析器到达它时,该标签被丢弃。

    如果节点不是当前节点,那么这是一个解析错误。

    【讨论】:

    • 你应该包括你引用的来源。
    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 2014-03-14
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多