在dom中定义属性的顺序

时间:2012-10-31 14:35:17

标签: java dom

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

我创建了元素:

propElement = document.createElement("prop");

道具正在打开标签。

然后

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

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

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

如何更改订单?

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

1 个答案:

答案 0 :(得分: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>

结果元素是div,其属性a的值为1,属性b的值为2

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

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

...导致完全与此代码完全相同的对象:

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

...提供ab实际上是简单的字段(不是可能有副作用的隐藏函数调用),这对DOM中的属性也是如此。

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

因此无效 HTML:

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

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