2011-01-27 82 views
1

顯然,如果jQuery選擇器被多次使用(而不是是一個好主意,如果只使用一次),則將其存儲在變量中是一個好主意。如何在JavaScript變量中存儲多個jQuery選擇器?

我的問題是,如何在變量中存儲多個交替使用的選擇器。例如,假設我選擇$('#object1, #object2),然後再選擇`$('#object1')。我將如何創建一個可以與其他變量組合的變量來創建多個選擇器。

如果我把它寫這樣的:

var object1 = "#object1"; 
var object2 = "#object2"; 

$(object1 + "," + object2); 

我只會引用串#object1,而不是實際的選擇。

那麼如何在變量中存儲多個選擇器,以便它們可以互換使用?

+0

該代碼有什麼問題?我認爲它會工作得很好。 – kprevas 2011-01-27 15:24:42

+0

它只是將一個字符串存儲爲一個var,而不是實際的選擇器。 – Jared 2011-01-27 15:38:03

+2

確切地說,選擇器*是字符串,而你指的是一個jQuery對象。 – 2011-01-27 15:48:01

回答

8

問題不在於selector string,問題在於DOM元素的查詢。 「問題」意味着,它很昂貴。這就是爲什麼你應該只查詢一次元素並存儲對它的引用。

var object1 = $('#object1'), 
    object2 = $('#object2'); 

object1.some_method(); 

更新

關於你的評論:

jQuery提供的.add()help方法,它允許Concat的jQuery的對象:

object1.add(object2).method(); 
3

不能完全確定我明白你的意思。你想存儲jQuery對象,所以你不必像一些緩存一樣不斷地搜索它們?

var cache = new Object(); 
cache['#object1'] = $('#object1'); 
cache['#object2'] = $('#object2'); 

要檢索jQuery值,您只需要撥打cache['#object1']即可。

1

您可以使用.add()

var object1 = $('#object1'), object2 = $('#object2'); 

object1.add(object2).addClass('couple'); 

或者,

var multiple = [object1[0], object2[0], ...]; 

$(multiple).addClass('party'); 
0

選擇是一個字符串時,傳遞給$()FN。返回與選擇器匹配的元素集合。所以這段代碼沒有錯。

你的代碼也可以寫爲:

var object1 = "#object1", 
    object2 = "#object2"; 

$(object1).add(object2).doSomething(); 

,或者它可以作爲被進一步優化,

var object1 = $('#object1'), 
    object2 = $('#object2'); 

object1.add(object2).doSomething(); 

其中doSomething可以是一個jQuery或jQuery插件定義的方法。

0

爲什麼不使用簡單的方法。

var severalVar = 'h1,h2,h3,h4,h5,h6'; 
$(severalVar).hide()