我目前正在研究DOM,我想知道如何更改标签数据的位置 例如
我创建了元素:
propElement = document.createElement("prop");
道具正在打开标签。
然后
propElement.setAttribute("name", "name1");
propElement.setAttribute("name2", "name2");
问题在于,尽管我在name1之后放置了set方法name2,但我会在name1之前的标签name2中看到。
如何更改订单?
(注意;我使用的是Java DOM API,而不是JavaScript。)
答案 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
。
这与在程序源中设置对象的属性完全相同。考虑一些具有obj
和x
属性的假设y
。这段代码:
obj.a = 1;
obj.b = 2;
...导致完全与此代码完全相同的对象:
obj.b = 2;
obj.a = 1;
...提供a
和b
实际上是简单的字段(不是可能有副作用的隐藏函数调用),这对DOM中的属性也是如此。
DOM的 textual (序列化)形式中的属性顺序可能很重要,并且它只与无效文本相关:如果同一属性被指定多次,只使用给定的第一个值,因为多次指定相同的属性是无效的。值未合并,后续值不会覆盖前一个值。仅使用第一个。
因此无效 HTML:
<div class="foo" class="bar">...</div>
...实际上会产生div
class
"foo"
("bar"
根本不存在)。但这只是处理无效序列化表单的一种应对机制。