这有什么理由:
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");
})
});
答案 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");
})