我正在迭代嵌套在div(.catHOLDER)中的列表,找到img标签并尝试返回img src。我遇到的问题是该函数返回所有函数源代码而不是字符串值,但奇怪的是如果我在循环中警告它返回字符串值;
$(document).ready(function(){
function getnestedimg() {
$('.catHOLDER ul').children('li').each(function(i,value) {
var imgstr = $(value).find('img').attr('src');
if (imgstr !== undefined) {
alert(imgstr);
}
});
}
getnestedimg();
});
上面的代码会显示一条带有img src路径的警告,但如果我尝试返回imgstr,它会返回我的函数代码;
$(document).ready(function(){
function getnestedimg() {
$('.catHOLDER ul').children('li').each(function(i,value) {
var imgstr = $(value).find('img').attr('src');
if (imgstr !== undefined) {
return imgstr;
}
});
}
getnestedimg();
});
返回以下内容;
function getnestedimg() {
$('.catHOLDER ul').children('li').each(function(i,value) {
var imgstr = $(value).find('img').attr('src');
if (imgstr !== undefined) {
//alert(imgstr);
//ret urn gotya;
return imgstr.val();
}
});
}
任何人都可以帮助我解决我的困境,或者是否有更好的方法来迭代与div嵌套的子标签?
答案 0 :(得分:1)
return
函数中的getnestedimg
语句通常位于您传递给each
的嵌套匿名函数中。这就是为什么它没有向getnestedimg
的调用者返回任何值。您应该按照建议将此值存储在getnestedimg
的函数变量中。
另外,我建议你阅读closures。
答案 1 :(得分:1)
我会用这样的东西:
var image_src = $('.catHOLDER ul > li img[src]').first().attr('src');
> li img[src]
仅选择img
个属性为src
且属于li
元素后代的标记。 .first()
只抓住第一个。
如果没有符合这些条件的元素,image_str === undefined
。
答案 2 :(得分:0)
$.fn.extend({
getsrc : function() {
return $(this).find(">ul> li img").map(function() {
return $(this).attr("src");
});
}
});
$(document).ready(function() {
var catHOLDERimgsrc = new Array();
catHOLDERimgsrc=$(".catHOLDER").getsrc();
console.log(catHOLDERimgsrc);
})
但是这个插件?我会直接做到:
$(document).ready(function() {
var catHOLDERimgsrc = new Array();
catHOLDERimgsrc=$(".catHOLDER").find(">ul> li img").map(function() {
return $(this).attr("src");
});
console.log(catHOLDERimgsrc);
})
imo最好的方法来迭代以获得一组数组排列的值(即如果你想要所有的图像src,否则你改变选择器然后如果不够你可以在map函数内做任何事情)