jQuery,each() - 返回值

Dar*_*kry 4 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;
                });
Run Code Online (Sandbox Code Playgroud)

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

谢谢,我很抱歉我的英文:-)

T.J*_*der 13

不要i在你给出的函数上声明一个参数each,不要从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;
    }
});
Run Code Online (Sandbox Code Playgroud)

这样,您传递的功能就是each封闭i,因此可以直接访问和更新它.通过声明i作为each回调的参数,您i在每次迭代(jQuery传入的那个,它是集合中元素的索引)上处理不同的东西.另外,返回值each是您调用它的jQuery对象(docs),这显然不是您想要的.

关于闭包的更多信息,如果您不清楚它们:闭包并不复杂

在上面的代码中,我还将w变量声明为each回调的本地变量,因为我假设你没有一个w变量,你想要更新它,因此成为隐含全局恐怖的牺牲品.

  • 每当省略`var`关键字时,指示小企鹅死亡的+1. (4认同)