使用 $(array).each 遍历数组
Using $(array).each to iterate over array
我最近发现了一个我以前从未见过的 jQuery 结构。这是一个简化版本:
$([ '1', '2', '3' ]).each( function( index, value ) {
console.log( "index", index, "value", value );
});
这将遍历数组 [ '1', '2', '3' ]
的所有元素。问题是,我习惯于看到 $(...)
与 CSS 选择器一起使用,但我还没有看到它用在新声明的数组上,就像这里所做的那样。不过它似乎可以工作(使用 Firefox 34 和 Chromium 39 测试)。
Q1: 我的理解是否正确,这等同于
var a = [ '1', '2', '3' ];
for ( var i = 0, value; value = a[i]; i++ ) {
console.log( "index", i, "value", value );
}
如果不是,有什么区别? (除了声明变量 a
、i
和 value
之外)。
Q2: 至于在 jQuery 中遍历数组,我更习惯 $.each
(不要与 $(selector).each
如上所用)。以上是否等同于
$.each( [ '1', '2', '3' ], function( index, value ){
console.log( "index", index, "value", value );
});
如果是,为什么jQuery中有两个如此相似的结构?在这两者之间,迭代数组的首选方式是什么,或者这只是个人风格的问题?
Q1.是.
Q2. jQuery 接受数组(和类数组对象)并将它们转换为 jQuery 对象。
您可以通过在浏览器控制台上发出以下命令轻松看到:
console.dir($([ '1', '2', '3' ]))
> VM199:2 e.fn.e.init[3]
那是一个调用 returns 的 jQuery 对象。它们可以用 .each()
迭代。此工具旨在使您能够执行此操作(人为的示例):
$(document.getElementsByTagName("A")).each(func);
使用普通的字符串数组这样做是可行的,并且将来可能会继续工作,但是我仍然认为这是对 API 的误用,并会推荐正确的方法:
$.each(['1', '2', '3' ], func);
Q1:如楼上所说,是的
Q2:首先我会说 不是因为你可以,你应该。
你可以使用 $([ '1', '2', '3' ]).each()
是正确的,它会起作用,但效率不高。
两者不一样(虽然它们很相似)。正如 jQuery doc 中所说:
The $.each()
function is not the same as $(selector).each()
, which is used to iterate, exclusively, over a jQuery object. The $.each()
function can be used to iterate over any collection, whether it is an object or an array.
这意味着如果您使用 $([ '1', '2', '3' ]).each()
,您将创建一个不需要的 jQuery 对象。在性能方面,jQuery 对象的 属性 each
然后调用传递数组的函数比调用创建数组的 jQuery 对象的函数要快得多,并且然后访问其原型 .each()
.
我最近发现了一个我以前从未见过的 jQuery 结构。这是一个简化版本:
$([ '1', '2', '3' ]).each( function( index, value ) {
console.log( "index", index, "value", value );
});
这将遍历数组 [ '1', '2', '3' ]
的所有元素。问题是,我习惯于看到 $(...)
与 CSS 选择器一起使用,但我还没有看到它用在新声明的数组上,就像这里所做的那样。不过它似乎可以工作(使用 Firefox 34 和 Chromium 39 测试)。
Q1: 我的理解是否正确,这等同于
var a = [ '1', '2', '3' ];
for ( var i = 0, value; value = a[i]; i++ ) {
console.log( "index", i, "value", value );
}
如果不是,有什么区别? (除了声明变量 a
、i
和 value
之外)。
Q2: 至于在 jQuery 中遍历数组,我更习惯 $.each
(不要与 $(selector).each
如上所用)。以上是否等同于
$.each( [ '1', '2', '3' ], function( index, value ){
console.log( "index", index, "value", value );
});
如果是,为什么jQuery中有两个如此相似的结构?在这两者之间,迭代数组的首选方式是什么,或者这只是个人风格的问题?
Q1.是.
Q2. jQuery 接受数组(和类数组对象)并将它们转换为 jQuery 对象。
您可以通过在浏览器控制台上发出以下命令轻松看到:
console.dir($([ '1', '2', '3' ]))
> VM199:2 e.fn.e.init[3]
那是一个调用 returns 的 jQuery 对象。它们可以用 .each()
迭代。此工具旨在使您能够执行此操作(人为的示例):
$(document.getElementsByTagName("A")).each(func);
使用普通的字符串数组这样做是可行的,并且将来可能会继续工作,但是我仍然认为这是对 API 的误用,并会推荐正确的方法:
$.each(['1', '2', '3' ], func);
Q1:如楼上所说,是的
Q2:首先我会说 不是因为你可以,你应该。
你可以使用 $([ '1', '2', '3' ]).each()
是正确的,它会起作用,但效率不高。
两者不一样(虽然它们很相似)。正如 jQuery doc 中所说:
The
$.each()
function is not the same as$(selector).each()
, which is used to iterate, exclusively, over a jQuery object. The$.each()
function can be used to iterate over any collection, whether it is an object or an array.
这意味着如果您使用 $([ '1', '2', '3' ]).each()
,您将创建一个不需要的 jQuery 对象。在性能方面,jQuery 对象的 属性 each
然后调用传递数组的函数比调用创建数组的 jQuery 对象的函数要快得多,并且然后访问其原型 .each()
.