以下两个语句是等效的:
// #1
$('.tr_tab_code').children().removeAttr("disabled");
// #2
$('.tr_tab_code').children().each(function() {
$(this).removeAttr("disabled");
});
在语句1中,不需要执行循环。我想知道是否所有返回一组元素的函数都支持隐式循环,如语句1中所示?
答案 0 :(得分:5)
jQuery的所有 setter / mutator 函数都可以在整个集合上使用,是的;绝大多数 getter 函数仅在集合中的第一个元素上起作用(text
是那里的主要例外):
$("selector").html("foo"); // Sets the content of ALL elements in the set
var html = $("selector").html(); // Gets the content of just the FIRST element
// in the set
当然,如果使用该功能,则每个元素都不能做不同的事情,因为您只是传递了一个值。有时您想按元素定制事物。大多数设置器和更改器都支持向它们传递一个函数,该函数将为集合中的每个条目调用;然后,该函数的返回值仅用于修改集合中的一个元素。例如,这将获取集合中每个输入的值,并通过调用val(function)
将其大写:
$("input").val(function(_, value) {
return value.toUpperCase();
});
(可悲的是,jQuery文档gets that wrong表示您需要使用each
来执行此操作。如果我有时间,我将执行拉取请求...)
val
,text
,html
,addClass
,...几乎所有的设置器/更改器都支持该格式。
因此,$().each()
可能是jQuery API中使用最多的方法。 :-)