Jquery函数返回函数代码而不是值

时间:2013-01-17 18:49:09

标签: javascript jquery function return loops

我正在迭代嵌套在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嵌套的子标签?

3 个答案:

答案 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函数内做任何事情)