解题思路:
判断当前节点或第个节点与第二节点父节点是否相等:
oNode1 === oNode2 || oNode1 === oNode2.parentNode
这种情况下,返回:oNode1 。否则继续比较第一、二节点的父节点是否相等:
oNode1.parentNode === oNode2.parentNode
相等,可以返回 oNode1.parentNode 或 oNode2.parentNode,否则递归。
完整代码如下:
function commonParentNode(oNode1, oNode2) {
return oNode1 === oNode2 || oNode1 === oNode2.parentNode ? oNode1 :
oNode1.parentNode === oNode2.parentNode ? oNode1.parentNode :
commonParentNode(oNode1, oNode2)
}
function commonParentNode(oNode1, oNode2) {
if(oNode1.parentNode == oNode2.parentNode||oNode2.parentNode==oNode1){
return oNode1.parentNode
};
if(oNode1.parentNode==oNode2){
return oNode2
};
return 0;
} function commonParentNode(oNode1, oNode2) {
var parentList1 = [oNode1];
var parentList2 = [oNode2];
var position1 = 0;
var position2 = 0;
var resultNode ;
while(resultNode === undefined){
var newNode;
if(position1 <= position2){
newNode = parentList1[position1].parentNode;
position1 += 1;
for(let i =0;i<parentList2.length;i++){
if(parentList2[i]=== newNode){
resultNode = newNode;
break;
}
}
parentList1.push(newNode);
} else {
newNode = parentList2[position2].parentNode;
position2 += 1;
for(let i =0;i<parentList1.length;i++){
if(parentList1[i]=== newNode){
resultNode = newNode;
break;
}
}
parentList2.push(newNode);
}
}
return resultNode;
} | element.compareDocumentPosition() | 比较两个元素的文档位置。 |
function commonParentNode(oNode1, oNode2) { var l1 = [], l2 = []; for (; oNode1; oNode1 = oNode1.parentNode) l1.push(oNode1); for (; oNode2; oNode2 = oNode2.parentNode) l2.push(oNode2); var len1 = l1.length, len2 = l2.length; for (var i = 0; i < len1 && i < len2; i++) { if (l1[len1 - 1 - i] !== l2[len2 - 1 - i]) return l1[len1 - i]; } return len1 > len2 ? l2[0] : l1[0]; }
function commonParentNode(oNode1, oNode2) {
if (oNode1 === oNode2) {
return oNode1;
} else {
var parent = oNode1;
while( parent = parent.parentNode ) {
if (parent === oNode2) {
return oNode2;
}
}
return commonParentNode( oNode1 , oNode2.parentNode );
}
}