2010-03-16 85 views

回答

5

我會嘗試這樣的事情,假設沒有JS庫

function getAncestors(node) { 
    if(node != document) return [node].concat(getAncestors(node.parentNode)); 
    else return [node]; 
} 

if(Array.prototype.indexOf === undefined) { 
    Array.prototype.indexOf = function(element) { 
     for(var i=0, l=this.length; i<l; i++) { 
      if(this[i] == element) return i; 
     } 
     return -1; 
    }; 
} 

然後就可以調用findFirstCommonAncestor(myElementA, myElementB)

+0

感謝圖書館的免費版本,雖然你們都是一個很大的幫助! – roborourke 2010-03-16 11:26:45

1

這種方式相當簡單:

var fp = $(focus).parents(); 
var ap = $(anchor).parents(); 
for (var i=0; i<ap.length; i++) { 
    if (fp.index(ap[i]) != -1) { 
    // common parent 
    } 
} 

遍歷一個元素的parents()和使用,直到找到一個匹配(或不)查看它們是否包含在其他的parents() 。使用該實用程序

function findFirstCommonAncestor(nodeA, nodeB, ancestorsB) { 
    var ancestorsB = ancestorsB || getAncestors(nodeB); 
    if(ancestorsB.length == 0) return null; 
    else if(ancestorsB.indexOf(nodeA) > -1) return nodeA; 
    else if(nodeA == document) return null; 
    else return findFirstCommonAncestor(nodeA.parentNode, nodeB, ancestorsB); 
} 

+0

非常整潔 - 我可能會得到這個項目的情況下,一些jQuery的,開始尋找值得現在。 – roborourke 2010-03-16 11:27:35

+0

@sanchothefat哦,我的壞,由於某種原因抱歉,我認爲你的問題是與jQuery相關的。 – cletus 2010-03-16 11:45:33

+0

不用擔心。幾乎所有的JavaScript都是jQuery相關的這些天(或應該是) – roborourke 2010-03-17 11:47:17

1

//現在看來似乎應該是相當簡單的,即使沒有圖書館或的indexOf

document.commonParent= function(a, b){ 
var pa= [], L; 
while(a){ 
    pa[pa.length]=a; 
    a= a.parentNode; 
} 
L=pa.length; 
while(b){ 
    for(var i=0; i<L; i++){ 
    if(pa[i]==b) return b; 
    } 
    b= b.parentNode; 
} 
} 
相關問題