2011-04-20 89 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(...); 

正如我之前所说的,这里这种解决方案可能是无用的,但对于进一步的问题,是一个非常好的选择