function commonParentNode(oNode1, oNode2) {
return oNode1.contains(oNode2) && oNode1 || commonParentNode(oNode1.parentNode,oNode2);
}
}
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;
} //递归
function commonParentNode(oNode1, oNode2) {
if(oNode1.contains(oNode2)){
return oNode1;
} else if(oNode2.contains(oNode1)){
return oNode2;
} else{
return commonParentNode(oNode1.parentNode, oNode2);
}
}
//循环
function commonParentNode(oNode1, oNode2) {
for( ; oNode1; oNode1 = oNode1.parentNode){
if(oNode1.contains(oNode2)){
return oNode1;
}
}
}
//三种情况
//1、oNode1为oNode2的最近父节点;
//2、oNode2为oNode1的最近父节点;
//3、oNode1和oNode2在同一层
function commonParentNode(oNode1, oNode2) {
if(oNode1.contains(oNode2))
return oNode1;
else if(oNode2.contains(oNode1))
return oNode2;
else
return oNode1.parentNode;
}
function commonParentNode(oNode1, oNode2) {
var parent1 = []; //用于存储包括oNode1的所有oNode1父节点
parent1.push(oNode1);
while(oNode1.parentNode){
parent1.push(oNode1.parentNode);
oNode1 = oNode1.parentNode;
}
while(oNode2){
for(var i in parent1){
if( parent1[i] == oNode2 ){
return oNode2;
}
}
oNode2 = oNode2.parentNode;
}
return null;
}
oNode1为全局变量 每次循环oNode1 = oNode1.parentNode
条件为oNode1.contains(oNode2)
满足条件就返回oNode1
function commonParentNode(oNode1, oNode2) {
if(oNode1 === oNode2) return oNode1;
if(oNode1.parentNode !== null) return commonParentNode(oNode1.parentNode, oNode2);
if(oNode2.parentNode !== null) return commonParentNode(oNode1, oNode2.parentNode);
}
递归三行就写完了昂
function commonParentNode(oNode1, oNode2) {
// 方法一:
while(true) {
oNode1 = oNode1.parentNode;
if(oNode1.contains(oNode2)) {
return oNode1;
}
}
} function commonParentNode(oNode1, oNode2) {
// 方法二:
if(oNode1.contains(oNode2)) {
return oNode1;
} else {
// 递归
return commonParentNode(oNode1.parentNode, oNode2);
}
}