2009-10-24 124 views
0

我在寫一個js遞歸函數來查找用戶點擊的所有元素的祖先。我的代碼是這樣的:一個javascript遞歸問題

/**a global variable.*/ 
var anc; 

function getAncestors(e){ 
var ele = e.target; 
var parentName = ele.parentNode.name;  
anc +=bracket(parentName); 

if (parentName.toLowerCase() == "undefined") return;  
else getAncestors(parent);  
} 

我跑它使用Firefox,但有一個在錯誤控制檯的錯誤信息,「錯誤:ele.parentNode未定義」。

另外,當我重置 anc =''; 它也沒有工作。

謝謝!

保羅

+0

凡不變量'parent'來從?那麼'bracket()'函數是做什麼的? 「父」可能是另一個由其他東西設置的全局變量? – 2009-10-24 04:59:20

回答

2

你可能想看看他們是如何實現的jQuery的parents功能。

2

undefined值,每使用Javascript標準,不一個name屬性 - 因此而不是試圖讓一個name一飲而盡,只是做了var parent = e.target.parentNode;和保釋出來,如果這是不確定的!

4
  1. parent未定義。您可能意思是ele.parentNode,但請參閱下文。
  2. 按名稱慣例和.target,我認爲它是e是一個事件。但你通過parent,這可能不是一個事件。
  3. 您可能想要檢查ele.parentNode在獲取其屬性之前是否有效。
0

你應該打破遞歸這樣

if(ele.parentNode) return; 

parentNode.name不被火狐

+0

這應該被否定('如果(!ele ...'),是嗎? – 2009-10-24 22:18:17

0

支持也許嘗試這樣的事:

var anc = []; 

function getAncestors(element) { 
    if (element.parentNode) { 
    anc.push(element.parentNode); 
    getAncestors(element.parentNode); 
    } 
}