1

我目前正在研究 DOM,我想知道如何更改标签数据的位置,例如

我创建了元素:

propElement = document.createElement("prop");

道具正在打开标签。

然后

propElement.setAttribute("name", "name1");

propElement.setAttribute("name2", "name2");

问题是,尽管我将 set 方法 name2 放在 name1 之后,但我会在 name1 之前的标签 name2 中看到。

如何更改订单?

(注意;我使用的是 Java DOM API,而不是 JavaScript。)

4

1 回答 1

2

你不能,元素上的属性顺序并不重要。实际上,在实时 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的属性。b2

这与在程序源中为对象设置属性完全相同。考虑一些假设obj的 withxy属性。这段代码:

obj.a = 1;
obj.b = 2;

...产生与此代码完全相同的对象:

obj.b = 2;
obj.a = 1;

...提供a并且b确实是简单的字段(不是可能有副作用的隐藏函数调用),这对于 DOM 中的属性是正确的。

DOM的文本(序列化)形式中的属性顺序可能很重要,并且它仅与无效文本有关:如果多次指定相同的属性,则仅使用给定的第一个值,因为多次指定同一个属性是无效的。这些值不会合并,后续值不会覆盖前一个值。仅使用第一个。

所以这个无效的HTML:

<div class="foo" class="bar">...</div>

...实际上导致divwith class "foo"("bar"根本不存在)。但这只是处理无效序列化表单的一种应对机制。

于 2012-10-31T14:36:37.040 回答