返回后,函数返回变量未定义

时间:2011-08-05 12:44:49

标签: javascript jquery function

这有什么理由:

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");

        })


});

3 个答案:

答案 0 :(得分:6)

您错过了return条件中的else声明。如果您的函数是递归的,那么顶级调用将不会返回任何内容,您最终会得到undefined

else {
    return find_parent_p(daddy);

}

答案 1 :(得分: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');

答案 2 :(得分:0)

如果你的目标是获得im的父母是p,你可以使用。

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