如何使jQuery的each方法返回数字

12

这是我的代码:

$.each(3, function(n) {
    alert(n);
});

我想弹出三次警告,但它不起作用。我该怎么办?


3
为什么需要使用 each?不能使用 whilefor 吗?据我所知,each 适用于数组。 - Ben
1
我有一种隐隐的感觉,你正在尝试在更大的上下文中使用它...也许你应该进一步解释一下你想要做什么,因为表面上看,你不应该使用jquery来完成这个任务,因为那不是jquery真正的用途。如果确实没有更多的内容,那就使用标准的for循环,可以在下面的答案中找到描述。 - CrayonViolent
3个回答

25

each 必须作用于对象。尝试创建一个长度为 3 的数组,例如:

$.each(new Array(3),
       function(n){alert(n);}
);

当然,我看不出避免使用普通JavaScript的理由。

for (var n = 0; n < 3; ++ n)
   alert(n);

+1个好答案,@KennyTM,我记得你曾经发布过一张有趣的图片,介绍如何使用jQuery来相加两个数字,让我笑了很久,但现在我找不到它了。你能否再次分享链接,因为似乎OP坚持要使用jQuery而不是简单的循环。 - Darin Dimitrov
1
@John:不是的。回调函数的第一个参数是索引,而不是值。另外,你指的是 undefined,而不是 0 - SLaks
@Slaks,哦,是啊,太有趣了。谢谢。我会收藏它以备将来参考 :-) - Darin Dimitrov
1
@Darin:你可以前往meta,并搜索jQuery。它在第一个问题的第一个答案中 - kennytm
@KennyTM,谢谢,这真的很棒。我认为这个问题也值得在每日WTF上留下一席之地。 - Darin Dimitrov
这很聪明,但不要这样做,没有理由效率会降低。 - whitneyland

3
晚了一步,但另一个选择是使用一个方法来原型化数字,该方法会多次调用回调函数。
Number.prototype.loop = function(cb) {
    for (var i = 0; i < this; i++) {
        cb.call(this, i);
    }
    return this + 0;
};

然后像这样调用它:
(3).loop(i => alert(i))

需要注意的是,修改标准原型被认为是不良实践。请参见MDN页面上名为Bad practice: Extension of native prototypes的部分。

RightJS做了类似的事情。(其他库可能也这样做。)


出于好奇,你为什么需要 this + 0 - Sam Dolan
@sdolan - 这是一种将返回值类型强制转换回number而不是object的方式。对于函数来说并非必要,但只是一个快速返回Number对象值的方法。 - user113716
谢谢,这正是我所假设的...只是以前从未见过。 - Sam Dolan
编辑以指出MDN的警告,但我认为能使用(3).loop(i => alert(i))来执行简单语句很酷。 - whitneyland

1

不行。
$.each 只能迭代数组或对象。 你需要使用 for 循环:

for(var n = 0; n < 5; n++) {
    alert(n);
}

1
有没有其他的jQuery方法可以做到这一点? - zjm1126
5
不,jQuery不是一种神奇的设备,可以消除对JavaScript的需求。 - SLaks
1
为什么非得用jQuery呢?对于这样一个简单的任务,可以使用纯JS完成。这就像下载一个20k的插件来执行alert一样。 - Ben
@SLaks的无益评论表明他在寻求魔法解决方案。有些库有一个循环函数,而jQuery则没有,就这么简单。 - whitneyland

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