getChildNodes() 返回的 DOM NodeList 的顺序
题
DOM 方法 getChildNodes()
返回一个 NodeList
当前的孩子中 Node
. 。虽然一个 NodeList
已排序,列表是否保证按文档顺序排列?
例如,给定 <a><b/><c/><d/></a>
是 a.getChildNodes()
保证返回 NodeList
和 b
, c
和 d
以该顺序?
这 javadoc 对此并不清楚。
解决方案
根据我的经验,是的。这 DOM规范 并没有更清楚。如果你很偏执,请尝试类似的事情
current = node.firstChild;
while(null != current) {
...
current = current.nextSibling;
}
其他提示
按文档排序的节点列表是 DOM 的其他实现(例如 Javascript 或 Python)中的行为。而且随机排序的节点列表是完全没有用的。我认为依赖按文档顺序返回的节点是安全的。
我的经验是,每次我费心去查看它时,它都是按文档顺序排列的。但是,我相信我在某处读到的内容不能保证按文档顺序排列。我现在找不到在哪里读到的,所以把它当作道听途说。我认为你最好的选择是如果你 必须 按文档顺序排列它们的方法是先使用 FirstChild,然后使用 NextSibling,直到没有更多的同胞为止。
我很想告诉你,这是有保证的(我相信是这样),但是 文档对象模型规范 在这种情况下,它本身似乎是模棱两可的。不过,我很确定它始终是文档顺序的。
在您的示例中,如所示。我相信是这样。然而,我在现实世界中经历过空间被解释为节点的经历,因此:
<a><b/><c/><d/></a>
不同于
<a><b/> <c/><d/></a>
如果您正在查看索引 [1],Firefox 和 IE 可能会显示不同的结果。我建议不要根据您的需要依赖订单。
是的,它们在返回 nodeList 时是有序的,您必须说 getNamedChildNodes 才能获取未按 nameNodeList 那样排序的列表。
不隶属于 StackOverflow