2011-04-20 116 views
51

通常,當我使用類作爲選擇器時,我嘗試使用一個「id」選擇器,因此它不會搜索整個頁面,而只會搜索該類所在的區域。jQuery中的多選擇器鏈接?

但是,我有一個代碼的局部視圖。這部分視圖(通用代碼)被包裹在表單標籤中。

我:

<form id="Create"> 
// load common code in from partial view 
</form> 

<form id="Edit"> 
// load common code in from partial view 
</form> 

現在,在這個共同的代碼,我需要一個插件連接到多個領域,所以我會做

$('#Create .myClass').plugin({ options here}); 

$('#Edit .myClass').plugin({options here}); 

所以這幾乎是相同的代碼。我想知道是否有辦法讓它查找任何一個ID?

編輯

我有它的問題時,我有變量爲我選擇

my.selectors = 
    { 
     A: '#Create', 
     B: '#Edit', 
     Plugin: ' .Plugin' 
    }; 

$(selector.A+ selectors.Plugin, selector.B+ selectors.Plugin) 

似乎沒有運行。

回答

71

您可以用逗號將多個選擇:

$('#Create .myClass,#Edit .myClass').plugin({options here}); 

或者,如果你將有一大堆的人,你可以一個類添加到您的所有表單元素,然後將該類中進行搜索。這並不能讓你想到限制搜索的速度節省,但如果我是你,我真的不會太擔心。瀏覽器做了很多奇特的事情來優化背後的常用操作 - 簡單的類選擇器可能會更快。

6

喜歡:

$('#Create .myClass, #Edit .myClass').plugin({ 
    options: here 
}); 

您可以指定任意數量的 選擇組合成一個單一的 結果。這種多表達式 組合子是一種有效的方式,用於選擇不同元素的 。返回的 jQuery對象中DOM元素的順序 可能不完全相同,因爲 它們將按文檔順序排列。替代此組合器的 是 .add()方法。

37

$("#Create").find(".myClass").add("#Edit .myClass").plugin({});

使用$.fn.add來連接兩套。

8

我想你可能會做這種方式看到表現稍好:

$("#Create, #Edit").find(".myClass").plugin(){ 
    // Options 
}); 
0

已經有很好的答案在這裏,但在其他一些情況下(不是特別如此)使用地圖可能是「唯一」的解決方案。

特別是當我們想使用正則表達式,而不是標準表達式。

對於這種情況下,它應該是這樣的:

$('.myClass').filter(function(index, elem) { 
    var jElem = $(elem); 

    return jElem.closest('#Create').length > 0 || 
      jElem.closest('#Edit').length > 0; 

}).plugin(...); 

正如我之前所說的,這裏這種解決方案可能是無用的,但對於進一步的問題,是一個非常好的選擇