jQuery each() - 返回值

5

我有这段代码:

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个回答

14

在给each函数传递参数时不要声明i,在each函数中不要返回任何内容,并且不要将each函数的结果赋值给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对象(文档),这显然不是你想要的。

如果你对闭包还不清楚,可以查看更多信息:闭包并不复杂

在上面的代码中,我也将w变量声明为each回调的局部变量,因为我假设你没有在其外部想要更新的w变量,所以避免了隐式全局变量的恐怖


我认为 return i; 没有太多意义。 - Mridul Kashatria
@mridkash:你说得对,我在发布的代码中确实这样做了,但忘记在开头句子中提到它。 - T.J. Crowder
4
点赞指出当省略var关键字时,一只小企鹅就会死亡。 - karim79
此外,从函数中返回false会停止each循环,返回其他任何值相当于“continue”。 - Mark Brittingham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接