题目描述
查找两个节点的最近的一个共同父节点,可以包括节点自身
题解
//解法一 递归
function commonParentNode(oNode1, oNode2) {
let p1 = oNode1.parentNode;
let p2 = oNode2.parentNode;
return search(p1, p2);
}
function search(n1, n2) {
if (n1.contains(n2)) return n1;
else if (n2.contains(n1)) return n2;
else return search(n1.parentNode, n2.parentNode);
}
//解法二 循环
function commonParentNode(oNode1, oNode2) {
let p1 = oNode1.parentNode;
let p2 = oNode2.parentNode;
while(true){
if(p1.contains(oNode2))
return p1;
else if(p2.contains(oNode1))
return p2;
else {
p1=p1.parentNode;
p2=p2.parentNode
}
}
}
官方测试样例
var a = function () {
var parent = document.createElement("DIV");
var a = document.createElement("DIV");
var b = document.createElement("DIV");
parent.appendChild(a);
parent.appendChild(b);
var c = commonParentNode(a, b);
return c === parent;
};