返回和每个()函数中的jquery each()函数的范围

时间:2012-09-18 02:04:17

标签: javascript jquery scope each

我有这样的标记:

<div class="imagegroup">
    <img>
    <img>
    <img>
</div>
<div class="imagegroup">
    <img>
    <img>
    <img>
</div>
<div class="imagegroup">
    <img>
    <img>
    <img>
</div>​

我想分别获得每组中最高图像的高度。我在each函数中有一个jquery each函数:

$('.imagegroup').each(function(index) {
    var tallestHeight = 0;
    var slideshowNumber = index; 
    var slides = $(this).children();

    $(slides).each(function(index) {
        thisSlideHeight = $(this).height();
        console.log("In slideshow #" + slideshowNumber + ", slide #" + index + " has height " + thisSlideHeight);
        if (thisSlideHeight > tallestHeight) {
            var tallestHeight = thisSlideHeight;
        }
        return tallestHeight;
    });

    console.log("For slideshow " + slideshowNumber + " the tallest slide is " + tallestHeight);

});

但我很困惑的是如何将每个函数“一级”内部的结果传递到“外部”每个函数而不仅仅设置一个全局变量。我写这篇文章时tallestHeight保持为零。我意识到这是 super 初学者:)所有帮助非常感谢。

http://jsfiddle.net/m2aJu/

1 个答案:

答案 0 :(得分:2)

您不需要return tallestHeight,删除它就可以了。

并在第二个内部将var tallestHeight = thisSlideHeight;更改为tallestHeight = thisSlideHeight;,您应该使用外部变量,而不是声明新变量。

或者您可以简化代码,如下所示:

$('.imagegroup').each(function(index) {
    var max = Math.max.apply(null, $(this).find('img').map(function() {
       return $(this).height();
    }));        
    console.log("For slideshow " + index + " the tallest slide is " + max);
});

And here is the working demo