getChildNodes()返回的DOM NodeList的顺序

时间:2020-03-05 18:54:19  来源:igfitidea点击:

DOM方法getChildNodes()返回当前Node子节点的NodeList。在订购NodeList的同时,列表是否保证按文档顺序排列?

例如,给定的<a> <b /> <c /> <d /> </a>是a.getChildNodes()保证返回带有b,c和c的NodeList。 d`顺序?

javadoc尚不清楚。

解决方案

回答

文档排序的节点列表是DOM的其他实现(例如Javascript或者Python)中的行为。而且,随机排序的节点列表将毫无用处。我认为依赖于按文档顺序返回的节点是安全的。

回答

以我的经验,是的。 DOM规范还不清楚。如果我们偏执狂,请尝试类似

current = node.firstChild;
while(null != current) {
    ...
    current = current.nextSibling;
}

回答

我的经验是,每当我不愿意查看它时,都是按文档顺序进行的。但是,我相信我在某处阅读并不能保证文件顺序正确。我现在找不到我在哪里读的书,因此将其作为传闻。我认为,如果必须按文档顺序进行操作,最好的选择是先使用FirstChild,然后再使用NextSibling,直到不再有兄弟姐妹为止。

回答

我很想告诉我们,这是可以保证的(我相信是这样),但是在这种情况下,文档对象模型规范本身似乎是模棱两可的。我很确定它始终按文档顺序排列。

回答

在示例中,如图所示。我相信是这样。但是,我经历了现实世界中将空间解释为节点的经历,因此:

<a><b/><c/><d/></a>

与...不同

<a><b/> <c/><d/></a>

如果我们正在查看索引[1],则Firefox和IE可能会显示不同的结果。我建议我们不要依赖订单。

回答

是的,它们是有序的,因为它返回了一个nodeList,我们必须说getNamedChildNodes才能获得一个列表,该列表与namedNodeList中的不一样。