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

时间:2014-12-04 12:29:52

标签: javascript jquery

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

E.g。说我有:

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

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

我想做这样的事情:

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

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

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

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

5 个答案:

答案 0 :(得分:5)

您可以使用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;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="search" class="active">Search</button>
<button id="signin" class="active">Sign In</button>
<button id="exit" class="active">Exit</button>

<button id="deactivate">Deactivate</button>

答案 1 :(得分:0)

array怎么样?将对象放在数组中并使用each()

循环它

答案 2 :(得分:0)

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

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

这非常冗余,因为它从jQuery对象获取DOM节点只是为了将它们变回jQuery对象,但我想它可以让你不得不循环遍历它们并add()将它们转换为空集合。 / p>

答案 3 :(得分:-1)

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

答案 4 :(得分:-2)

您可以使用add()向已存在的jQuery上下文添加元素:

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

请参阅Documentation