2011-08-05 121 views
3

有什麼理由認爲這樣的:從函數返回變量是不明確的,一旦返回

function find_parent_p(x){ 
    daddy = jQuery(x).parent(); 


    if(daddy.attr("tagName").toLowerCase() == 'p'){ 
     console.log(daddy,"result"); 
     return (daddy); 
    } else { 
     find_parent_p(daddy); 

    } 

} 
jQuery(document).ready(function($){ 

     $('img').each(function(){ 

      next = find_parent_p($(this)); 

     }) 


}); 

將在控制檯(預期的行爲)返回一個jQuery對象,其中如下面的回報Undefined所有我做的是移動調用console.log功能外,後調用它:

function find_parent_p(x){ 
    daddy = jQuery(x).parent(); 


    if(daddy.attr("tagName").toLowerCase() == 'p'){ 

     return (daddy); 
    } else { 
     find_parent_p(daddy); 

    } 

} 
jQuery(document).ready(function($){ 

     $('img').each(function(){ 

      next = find_parent_p($(this)); 
        console.log(next,"result"); 

     }) 


}); 
+1

你究竟在做什麼?只需找到具有名爲tagName的屬性的父類,其值爲p? –

+0

當你可以使用parent(),parents()或nearest()時,find_parent_p的目的是什麼? – jerjer

+0

你爲什麼要混合$和jQuery?選一個! – epascarello

回答

6

你錯過了你的else條件return聲明。如果函數遞歸,那麼頂層調用將不會返回任何內容,最終將以undefined結束。

else { 
    return find_parent_p(daddy); 

} 
3

我不確定這是否會導致問題,但該函數僅在立即找到該元素時才起作用。

  • daddy一個局部變量(以防止全局變量可能發生的衝突)
  • 返回從遞歸調用的結果

function find_parent_p(x) { 
    var daddy = jQuery(x).parent(); 
    if(daddy.attr("tagName").toLowerCase() == 'p') { 
    return daddy; 
    } else { 
    return find_parent_p(daddy); 
    } 
} 

注意:您可以做同樣只用jQuery:

var next = $(this).closest('p'); 
+0

+1對'最近()' – epascarello

+0

感謝您指出最接近的。我會給你打勾,但這不是嚴格的實際問題的最佳答案,所以你必須做一個+1 –

0

如果您的目標是獲得img的父母是p,您可以使用。

$('img').each(function(){ 
    next = $(this).closest('p'); 
    console.log(next,"result"); 
})