Skip to content

Instantly share code, notes, and snippets.

@wintercn
Created April 9, 2013 03:55
Show Gist options
  • Star 22 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save wintercn/5342839 to your computer and use it in GitHub Desktop.
Save wintercn/5342839 to your computer and use it in GitHub Desktop.
取两个HTML节点最近的公共父节点
function getCommonParent(el1,el2){
var parents1 = [];
var el = el1;
while(el) {
parents1.unshift(el);
el = el.parentNode;
}
var parents2 = [];
var el = el2;
while(el) {
parents2.unshift(el);
el = el.parentNode;
}
var i = 0;
while(i<parents1.length && i<parents2.length && parents1[i+1] == parents2[i+1])
i++;
return parents1[i];
}
@wintercn
Copy link
Author

wintercn commented Apr 9, 2013

@cuixiping 真是各种高人啊...... 长见识了

@cuixiping
Copy link

再来一段使用的标准compareDocumentPosition的,把代码修改得简洁了一点。

function getCommonParent(a,b){
    var c = a.compareDocumentPosition(b);
    if(c & 8){
        return b.parentNode;
    }else if(c & 16){
        return a.parentNode;
    }else if(c & 6){
        while(!(8 & a.compareDocumentPosition(b=b.parentNode)));
        return b;
    }
    return null;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment