2011-08-05 117 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"); 
})