2015-12-02 54 views
3

优化一些js的工作/ jQuery代码通过缓存,他们已经习惯不止一次地帮助速度东西如选择:.removeClass超过一个缓存选择

var object = $("#object"); 
object.removeClass('class-name'); 

我碰到的麻烦链接缓存的选择,虽然,这是我的尝试:

var object1 = $("#object1"); 
var object2 = $("#object2"); 
$(object1, object2).removeClass('class-name'); 

这适用于第一高速缓存元素而不是第二,在正确的语法的任何想法?
我搜索了它,但似乎无法找到任何东西!

回答

5

使用.add()

创建添加到匹配的元素集合中元素的新jQuery对象。

object1.add(object2).removeClass('class-name'); 
+1

完美的作品,谢谢! 一旦10分钟的时间限制结束,我会将你的答案设置为答案。 但是,如果有超过2个缓存选择器呢? –

+1

@JacobBanner,你可以继续使用'add()'像'object1.add(object2).add(object3)' – Satpal

+0

非常感谢的人,你一直在帮助很大! –

1

Satpal答案是非常简单的,但如果你想要一个替代(以处理更多的类,而不是一个巨大的jQuery链末端),你可以保持的jQuery对象的数组,并使用迭代:

"use strict"; 
 
var arr = []; 
 
var object1 = $("#object1"); 
 
var object2 = $("#object2"); 
 
arr.push(object1, object2) 
 
for (var e of arr) { 
 
    e.removeClass("class-name"); 
 
}
.class-name { 
 
    color: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="object1" class="class-name">this</div> 
 
<div id="object2" class="class-name">this</div> 
 
<div id="object3" class="class-name">this</div>

+1

当然,这也会派上用场,谢谢Alex! –

0

使用这两种选择起来是另一种选择,你可以使用:

$('#object1, #object2').removeClass('class-name'); 
+1

我可能错了,但我认为引用元素本身,而不是缓存的选择器,它没有提升性能 –

+0

哦,是的,这是我的错。我现在了解到,这不是缓存选择器的解决方案。 – nerezo

+0

谢谢你回答老兄! :) –