我有以下代码
function myFunction(items) {
// this prints out 11
alert(items.length);
$(items).each(function(i, item) {
// item is undefined for some reason
}
}如果我提醒项目的长度,它就会有元素(准确地说是11个)。那么,为什么有11个项目存在,但jQuery仍然传递未定义?
发布于 2010-07-26 01:58:07
对此的唯一解释是,项目数组包含未定义的值,即:
items = [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined];其他两个答案都是完全不正确的。each的第一个参数是索引,而不是值,jQuery.fn.each调用jQuery.each。它们之间没有消除歧义。
发布于 2010-07-26 01:41:07
听起来你是在,而不是,正在给你的函数传递一个jQuery wrappet set。如果传递array或object,则需要使用jQuery helper function $.each(),如下所示
$.each(items, function(index, element){
});正如我在其他答案中多次提到的那样,使用.each()或javascripts原生for..in遍历数组是不好的做法。
如果要传递arrays,请使用标准for loop。
编辑
事实证明,您实际上可以使用标准数组调用jQuery constructor。但这样做似乎是可怕的因果报应,你不能调用所有那些jQuery方法中的95%,除非你想崩溃/破坏你的代码。
发布于 2010-07-27 03:35:43
由于注释不允许使用漂亮的代码清单...(是吗?):
动画将对任何对象起作用。它被记录为只对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”。
https://stackoverflow.com/questions/3330264
复制相似问题