2015-12-02 32 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

謝謝你回答老兄! :) –