Java 定义dom中属性的顺序
我目前正在处理DOM,我想知道如何更改标记数据的位置 比如说 我创建了以下元素:Java 定义dom中属性的顺序,java,dom,Java,Dom,我目前正在处理DOM,我想知道如何更改标记数据的位置 比如说 我创建了以下元素: propElement = document.createElement("prop"); 道具正在打开标签 然后 问题是,尽管我将set方法name2放在name1之后,但我会在标记name2中看到name1之前 我怎样才能更改订单 (注意:我使用的是Java DOM API,不是JavaScript。)你不能,元素属性的顺序并不重要。事实上,在活动DOM中,没有顺序。顺序似乎只与DOM的序列化形式(例如HT
propElement = document.createElement("prop");
道具正在打开标签
然后
问题是,尽管我将set方法name2放在name1之后,但我会在标记name2中看到name1之前
我怎样才能更改订单
(注意:我使用的是Java DOM API,不是JavaScript。)你不能,元素属性的顺序并不重要。事实上,在活动DOM中,没有顺序。顺序似乎只与DOM的序列化形式(例如HTML标记等)相关。即使如此,这个顺序也没有任何意义,除了与无效文本相关的意义(下文将详细介绍) 属性基本上是对象(它们所附加到的DOM元素)的简单属性。它们绝对没有顺序,事实上,它们在DOM中的表示是一个“…不以任何特定顺序维护”的 记住DOM描述的是对象模型,这一点很重要。DOM的序列化形式可以是文本形式(例如,定义DOM的HTML文档),但DOM不是文本形式。在HTML文档中,由于它是线性文本(从上到下,从左到右),定义一个属性的文本自然必须在描述另一个属性的文本之前,但这并不意味着结果DOM对象中的属性有任何顺序,因为它们根本没有顺序。因此:
<div a="1" b="2">...</div>
…产生与此代码完全相同的对象:
obj.b = 2;
obj.a = 1;
…提供的a
和b
实际上是简单的字段(不是可能有副作用的隐藏函数调用),这对于DOM中的属性是正确的
DOM的文本(序列化)形式中的属性顺序有一种很重要的方式,它只与无效的文本相关:如果多次指定同一属性,则只使用给定的第一个值,因为多次指定同一属性是无效的。这些值不会合并,后续值不会覆盖前一个值。只使用第一个
因此,此无效HTML:
<div class="foo" class="bar">...</div>
。。。
…实际上导致
div
与类
(“bar”
根本不存在)。但这只是处理无效序列化表单的应对机制。@FedorE:好的。答案没有改变(不管您使用什么语言,属性的顺序在DOM中仍然不重要),但这解释了问题上的标记。:-)你确定吗?因为现在我看到文件的顺序是字母顺序等,也许我需要以不同的方式创建文件?@FedorE:是的,我确定。看。特别要注意的是,属性在内存中的表示形式是“…不以任何特定顺序维护”。您使用的特定工具可能会以某种序列化格式按字母顺序放置属性,但这与DOM无关。元素上的属性只是元素的无序属性。您好,谢谢您的快速重播!!!我只是为属性设置了我喜欢的顺序,例如propElement.setAttribute(“b”,“b”);setAttribute(“a”,“a”)和顺序改为字母顺序,我在IE和chrome中打开文件,使用DOMSource source=new DOMSource(this.document);transformer.setOutputProperty(OutputKeys.INDENT,“是”);也许有问题?@FedorE:再说一次:元素中的属性没有顺序。订单无法“更改”,因为它不存在。我再清楚不过了。当您试图指令或依赖元素上属性的顺序时,您不需要执行任何操作,因为它们没有顺序。
obj.a = 1;
obj.b = 2;
obj.b = 2;
obj.a = 1;
<div class="foo" class="bar">...</div>