jQuery – 将方法应用于多个对象

我想在许多声明的变量上运行相同的方法。

比如说我有:

var searchBtn = $('#search'); var signInBtn = $('#signin'); signInBtn.removeClass('active'); searchBtn.removeClass('active'); 

我想做这样的事情:

 $(signInBtn, searchBtn).removeClass('active'); 

但我不能, searchBtn在这种情况下被解释为范围(我认为)。

我的问题是,如何组合定义的对象并对它们运行相同的方法?

注意:只是为了澄清,我不是在谈论使用ID,类等来定位元素,我在谈论已被定义为变量的对象。

您可以使用add()组合两组jquery对象:

 var searchBtn = $('#search'); var signInBtn = $('#signin'); signInBtn.add(searchBtn).removeClass('active'); 

如果你有多个对象,你可以链接add()或将对象放在一个数组中并将它们一起reduce()add()不支持多个参数):

 [signInBtn,searchBtn,anotherButton].reduce(function(a,b){return a.add(b);}) .removeClass('active'); 

示例代码段

 $('#deactivate').click(function() { var searchBtn = $('#search'); var signInBtn = $('#signin'); var exitBtn = $('#exit'); [searchBtn, signInBtn, exitBtn].reduce(function(a, b) { return a.add(b); }) .removeClass('active'); }); 
 .active { background-color: red; } 
      

array怎么样? 将您的对象放在一个数组中并使用each()循环它

通过阅读文档, jQuery()可以获取DOM元素的数组并将它们转换为集合,因此如果您不介意额外的开销,您可以这样做:

 $([signInBtn[0], searchBtn[0]]).removeClass('active'); 

这是非常多余的,因为它从jQuery对象获取DOM节点只是为了将它们变回jQuery对象,但我想它可以省去你必须循环遍历它们并将它们add()到空集合中。

 $('#search,#signin').removeClass('active'); 

您可以使用add()将元素添加到现有的jQuery上下文中:

 searchBtn.add(signInBtn).removeClass('active'); 

见文档