jQuery处理每个元素

10

我很好奇为什么这段代码是无效的:

$.each( $("p") ).css("color", "green");


尽管这段代码可以正常工作:

$.each($("p"), function() { $(this).css("color", "green") });


使用jQuery的each方法,不能将元素链接在一起吗?


不,这样是不可能的。这里有一个现有的SO讨论:http://stackoverflow.com/questions/2002394/jquery-animate-each-chaining - davidethell
4个回答

36

移除包装器:

$("p").css("color", "green");

如果你想使用$.each,请将一个函数指定为第二个参数:

$("p").each(function() {
//Or: $.each( $("p"), function() {
   $(this).css("color", "green");
});
jQuery方法自动返回集合的实例,所以链式调用仍然是可能的。
示例:http://jsfiddle.net/pC2Bj/ 另请参阅:

3
需要注意的是,$.each 用于 HTMLCollections 和其他本地 JavaScript 集合,而 jQuery 方法 $('.selector').each() 则用于 jQuery 对象。 - Sethen

9
你只传了一个参数,而$.each()需要第二个参数为函数。 http://api.jquery.com/jquery.each/

jQuery.each( collection, callback(indexInArray, valueOfElement) )

collection 要迭代的对象或数组。

callback(indexInArray, valueOfElement) 在每个对象上执行的函数。


是的,可以链接使用,因为$.each返回正在迭代的集合。
$.each($("p"), function() { $(this).css("color", "green") }).addClass('test');

你能举个链式调用的例子吗? - Ryre
1
@Toast:已更新并附上示例。 - user1106925
@Toast。我希望你是对的,但我的答案是错误的。请参见此JSFiddle:http://jsfiddle.net/gdoron/qSquu/1/ - gdoron

1
请注意,为实现(最可能的)预期效果,不需要使用任何版本的each
$("p").css("color", "green");

完成工作。


1

$.each 需要两个参数,第二个是回调函数,对每个元素执行一次。如果不传递回调参数,则 $.each 将无法工作。

另外,$.each 返回它迭代的对象,因此与返回 jQuery 对象的方法不同,链接操作不起作用。


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