jQuery,each() - 返回值

时间:2011-06-26 10:37:26

标签: javascript jquery

我有这段代码:

i = 60;
                i = $(this).find('li a').each(function(i) {
                    w = $(this).text();
                    $('#js').text(w);
                    w = $('#js').width();
                    if(w > i) {
                        i = w;
                    }
                    return i;
                });

这是错的:-)。 我有X个字符串($(this).find('li a'))。我想获得最长的长度(px)并将其长度保存到变量i。我稍后将在我的代码中使用。

谢谢你,我很抱歉我的英语: - )

1 个答案:

答案 0 :(得分:13)

不要在您给予的函数i上声明each参数,不要从each函数返回任何内容,也不要分配each函数的结果{1}}到i。然后它应该工作。

i = 60;
$(this).find('li a').each(function() {
    var w = $(this).text();
    $('#js').text(w);
    w = $('#js').width();
    if(w > i) {
        i = w;
    }
});

这样,您传递给each的函数是i上的闭包,因此可以直接访问和更新它。通过将i声明为each回调的参数,您在每次迭代时处理不同的i(jQuery传入的那个,这是元素中的元素的索引)组)。另外,each的返回值是您调用它的jQuery对象(docs),这显然不是您想要的。

关于闭包的更多信息,如果你不清楚它们: Closures are not complicated

在上面的代码中,我还将w变量声明为each回调的本地变量,因为我假设你之外没有w变量想要更新,因此成为The Horror of Implicit Globals的牺牲品。