你不能,元素上的属性顺序并不重要。实际上,在实时 DOM 中,没有顺序。顺序似乎只存在于与 DOM 的序列化形式(例如,HTML 标记等)相关的情况下。即便如此,除了与无效文本有关的命令外,该命令没有任何意义(更多内容见下文)。
属性基本上是对象的简单属性(它们附加到的 DOM 元素)。它们绝对没有顺序,实际上它们在 DOM 中的NamedNodeMap
表示是“......不以任何特定顺序维护”。
重要的是要记住 DOM 描述了一个对象模型。DOM的序列化形式可能是文本的(例如,定义 DOM 的 HTML 文档),但 DOM 不是。在 HTML 文档中,由于它是线性文本(从上到下,从左到右),定义一个属性的文本自然必须在描述另一个属性的文本之前,但这并不意味着属性的任何顺序生成的 DOM 对象,因为它们根本没有顺序。所以这:
<div a="1" b="2">...</div>
描述与此完全相同的元素:
<div b="2" a="1">...</div>
结果元素是 a div
,它有一个a
带有 value的属性和一个带有value1
的属性。b
2
这与在程序源中为对象设置属性完全相同。考虑一些假设obj
的 withx
和y
属性。这段代码:
obj.a = 1;
obj.b = 2;
...产生与此代码完全相同的对象:
obj.b = 2;
obj.a = 1;
...提供a
并且b
确实是简单的字段(不是可能有副作用的隐藏函数调用),这对于 DOM 中的属性是正确的。
DOM的文本(序列化)形式中的属性顺序可能很重要,并且它仅与无效文本有关:如果多次指定相同的属性,则仅使用给定的第一个值,因为多次指定同一个属性是无效的。这些值不会合并,后续值不会覆盖前一个值。仅使用第一个。
所以这个无效的HTML:
<div class="foo" class="bar">...</div>
...实际上导致div
with class
"foo"
("bar"
根本不存在)。但这只是处理无效序列化表单的一种应对机制。