我有这段代码:
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。我稍后将在我的代码中使用。
谢谢你,我很抱歉我的英语: - )
答案 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的牺牲品。