dom 节点查找

题目描述

查找两个节点的最近的一个共同父节点,可以包括节点自身。

输入描述:

oNode1 和 oNode2 在同一文档中,且不会为相同的节点。

代码:

 1 //方法一
 2 //oNode.contains(oNode2):   父节点oNode(或自己)包含子节点oNode2,返回true
 3 //这个方法比递归的方法效率要高
 4 function commonParentNode(oNode1, oNode2) {
 5     while(oNode1){
 6         if(oNode1.contains(oNode2)){
 7             return oNode1;
 8         }
 9         oNode1 = oNode1.parentNode;
10     }
11 }
12 
13 //方法二:递归
14 function commonParentNode(oNode1, oNode2) {
15     if(oNode1.contains(oNode2)){
16         return oNode1;
17     }
18     else {
19         return commonParentNode(oNode1.parentNode,oNode2);
20     }
21 }
22 
23 //方法三:比较父节点
24 function commonParentNode(oNode1, oNode2) {
25     //取oNode1的父节点
26     var parent1=[];
27     parent1.push(oNode1);
28     while(oNode1.parentNode){
29         parent1.push(oNode1.parentNode);
30         oNode1 = oNode1.parentNode;
31     }
32      //取oNode2的父节点
33     var parent2=[];
34     parent2.push(oNode2);
35     while(oNode2.parentNode){
36         parent2.push(oNode2.parentNode);
37         oNode2 = oNode2.parentNode;
38     }
39     //比较
40     var i = 0 , j =0;
41     while(i<parent1.length){
42         j = 0;
43         oNode1 = parent1[i++];
44         while(j<parent2.length){
45             if(oNode1 == parent2[j++]){
46                 return oNode1;
47             }
48         }
49     }
50     return null
51 }

猜你喜欢

转载自www.cnblogs.com/daheiylx/p/8970731.html