jQuery.each() 未定义问题
2010-07-25
24938
我有以下代码
function myFunction(items) {
// this prints out 11
alert(items.length);
$(items).each(function(i, item) {
// item is undefined for some reason
}
}
我警告项目的长度,它包含元素(准确地说是 11 个)。那么为什么存在 11 个项目,但 jQuery 仍然传递未定义的值?
3个回答
对此的唯一解释是 items 数组包含未定义的值,即:
items = [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined];
其他两个答案都完全不正确。
each
的第一个参数是索引,而不是值,并且 jQuery.fn.each 调用 jQuery.each。它们之间没有歧义。
Matt
2010-07-25
听起来您
没有
将
jQuery 包装器集
传递给您的函数。如果您传递
一个
数组
或一个
对象
,则需要使用
jQuery 辅助函数
$.each()
,例如
$.each(items, function(index, element){
});
正如我在其他答案中多次提到的那样,使用
.each()
或 javascripts 原生
for..in
循环遍历数组是一种不好的做法。
如果您传递
数组
,请使用标准
for 循环
。
编辑
事实证明,您实际上确实可以使用标准数组调用
jQuery 构造函数
。
但这样做似乎是很糟糕的因果,你无法调用所有 jQuery 方法中的 95%,除非你想让你的代码崩溃/损坏。
jAndy
2010-07-25
由于注释不允许漂亮的代码列表...(是吗?):
Animate 可以对任何内容起作用。据记录,它只对 CSS 属性起作用,但只是为了证明一点:
var foo = { x: 10, y: 12 };
$(foo).animate({ x: "+=20", y: "20" }, 1000,
function () { alert(foo.x + ":" + foo.y); });
将输出“30:20”。这有用吗?也许在日常工作中用不到。:)
数组的诀窍是您将在每个条目中设置相同的属性。示例:
var foo = [{ x: 10 }, { x: 20 }];
$(foo).animate({ x: "+=30" }, 1000,
function () { alert(this.x); });
输出“40”和“50”。
OdeToCode
2010-07-26