是否所有设置返回函数都支持隐式循环?

时间:2018-08-28 12:49:29

标签: jquery

以下两个语句是等效的:

// #1
$('.tr_tab_code').children().removeAttr("disabled");

// #2
$('.tr_tab_code').children().each(function() {
  $(this).removeAttr("disabled");
});

在语句1中,不需要执行循环。我想知道是否所有返回一组元素的函数都支持隐式循环,如语句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来执行此操作。如果我有时间,我将执行拉取请求...)

valtexthtmladdClass,...几乎所有的设置器/更改器都支持该格式。

因此,$().each()可能是jQuery API中使用最多的方法。 :-)