题目描述
查找两个节点的最近的一个共同父节点,可以包括节点自身
输入描述:
oNode1 和 oNode2 在同一文档中,且不会为相同的节点
function commonParentNode(oNode1, oNode2) {
if(oNode1.contains(oNode2)){
return oNode1;
}else{
return commonParentNode(oNode1.parentNode, oNode2);//使用递归的思路往上查找,找到一个节点的父节点,看他是否包含另一个DOM节点
}
}
function commonParentNode(oNode1, oNode2) {
var on1_parents = getParents(oNode1);
var on2_parents = getParents(oNode2);
var i = on1_parents.length;
var j = on2_parents.length;
for(; i >= 0 && j >= 0 && on1_parents[i] === on2_parents[j]; i--, j--);
return on1_parents[i+1];
}
function getParents(oNode) {
var parents = [];
var parent = oNode;
while(parent) {
parents.push(parent);
parent = parent.parentElement;
}
return parents;
}
function commonParentNode(oNode1, oNode2) {
//oNode1为全局变量
//条件为oNode1.contains(oNode2)
//每一次oNode1 = oNode1.parentNode
for (;;oNode1 = oNode1.parentNode) {
if (oNode1.contains(oNode2)) {
return oNode2;
}
}
//递归法
/*
if (oNode1.contains(oNode2)) {
return oNode1;
} else {
return commonParentNode(oNode1.parentNode, oNode2);
}
*/
}