如何测试哪个节点首先出现?

时间:2015-12-21 23:06:12

标签: javascript dom nodes

我有两个存储在变量中的给定节点。是否存在简单,低资源使用的解决方案,以找到文档中首先出现的节点?两个节点都应该是兄弟节点,但可能分开很多节点。

2 个答案:

答案 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`并且循环结束。

FIDDLE

答案 1 :(得分:3)

尝试compareDocumentPosition

function theFirst(node1, node2) {
  return node1.compareDocumentPosition(node2)
    & Node.DOCUMENT_POSITION_FOLLOWING ? node1 : node2;
}

请注意,如果节点位于不同的树中,则结果可能是随机的(但是一致)。您可以使用& Node.DOCUMENT_POSITION_DISCONNECTED过滤掉该情况并返回,例如undefined