Created
April 9, 2013 03:55
-
-
Save wintercn/5342839 to your computer and use it in GitHub Desktop.
取两个HTML节点最近的公共父节点
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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]; | |
} |
再来一段使用的标准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
@cuixiping 真是各种高人啊...... 长见识了