Firefox:html 解析后标记属性严重重新排序

bap*_*ptx 0 html firefox firebug parsing

HTML 代码:

<input id="txtSizeBeforeValue" type="text" size="5" value="blabla">
<input id="txtValueBeforeSize" type="text" value="blabla" size="5">
Run Code Online (Sandbox Code Playgroud)

HTML解析代码:

<input id="txtSizeBeforeValue" type="text" value="blabla" size="5">
<input id="txtValueBeforeSize" type="text" size="5" value="blabla">
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到 Firefox HTML 解析器有一个问题,每个 HTML 标签的标签属性都被严重重新排序,比如输入文本/按钮、文本区域、画布......即使你像重新排序一样编写标签属性,它也会再次重新排序。该问题在 Firebug 和 Firefox 的 HTML 分析开发工具中可见,因此它不可能是 Firebug 问题。Google Chrome 没有问题,因为 HTML 解析器不会重新排序标签属性。

您的 Firefox 也有这个问题吗?每个平台都有吗?

hsi*_*nen 5

您应该将重新排序归咎于 DOM,而不是归咎于解析器。(我在 Firefox 中编写了 HTML 解析器。)

在 Firefox 中,不同的属性在内部以不同的表示形式存储(特别是出于 CSS 目的而被视为遗留表示提示的属性)。当您看到属性重新排序时,这意味着您在一个元素上拥有属于不同类型内部存储桶的属性。

您会发现从 IE 的 DOM 中读取的属性顺序通常也与源顺序不同。

还行吧。规范只要求顺序稳定,因此如果您读取innerHTML两次而不更改其间的属性,则应该获得相同的序列化两次。

虽然属性的确切顺序是 UA 定义的,并且可能取决于诸如原始标记中给出的属性的顺序等因素,但排序顺序必须稳定,以便连续调用该算法可以序列化元素中元素的属性。相同的顺序。

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments