我有两个存储在变量中的给定节点。是否存在简单,低资源使用的解决方案,以找到文档中首先出现的节点?两个节点都应该是兄弟节点,但可能分开很多节点。
答案 0 :(得分:3)
这样的事情应该有效
function isAfter(n1, n2) {
var prev = n1.previousSibling,
res = true;
while (prev) {
if ( prev === n2 ) {
prev = res = false;
} else {
prev = prev.previousSibling;
}
}
return !!res;
}
使用previousSibling
(或使用nextSibling
向下)从第一个节点向上迭代,并与第二个节点进行比较,以查看是否在第一个节点之后(或之前)。
如果没有兄弟姐妹,previousSibling returns
null`并且循环结束。
答案 1 :(得分:3)
function theFirst(node1, node2) {
return node1.compareDocumentPosition(node2)
& Node.DOCUMENT_POSITION_FOLLOWING ? node1 : node2;
}
请注意,如果节点位于不同的树中,则结果可能是随机的(但是一致)。您可以使用& Node.DOCUMENT_POSITION_DISCONNECTED
过滤掉该情况并返回,例如undefined
。