通常当我使用类作为选择器时,我会尝试使用“id”选择器,因此它不会搜索整个页面,而只搜索类所在的区域。
但是我有一个包含代码的局部视图。这个局部视图(公共代码)围绕一个表单标记。
我有:
<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)
似乎没有跑。
答案 0 :(得分:86)
您可以将多个选择器与逗号结合使用:
$('#Create .myClass,#Edit .myClass').plugin({options here});
或者,如果您要使用它们,可以在所有表单元素中添加一个类,然后在该类中进行搜索。这并没有让你获得限制搜索的速度节省,但老实说,如果我是你,我也不会过分担心。浏览器做了许多花哨的事情来优化背后的常见操作 - 简单的类选择器可能更快。
答案 1 :(得分:39)
$("#Create").find(".myClass").add("#Edit .myClass").plugin({});
使用$.fn.add
连接两组。
答案 2 :(得分:10)
答案 3 :(得分:9)
我认为通过这种方式可能会看到更好的性能:
$("#Create, #Edit").find(".myClass").plugin(){
// Options
});
答案 4 :(得分:6)
像:
$('#Create .myClass, #Edit .myClass').plugin({
options: here
});
您可以指定任意数量的 选择器组合成一个单一的 结果。这个多重表达 组合器是一种有效的方法 选择不同的元素。命令 返回的DOM元素 jQuery对象可能不一样,如 它们将按文件顺序排列。一个 该组合器的替代品是 .add()方法。
答案 5 :(得分:0)
这里已经有很好的答案,但在其他一些情况下(特别是这不是),使用map可能是“唯一”的解决方案。
特别是当我们想要使用regexps时,除了标准的那些。
对于这种情况,它看起来像这样:
$('.myClass').filter(function(index, elem) {
var jElem = $(elem);
return jElem.closest('#Create').length > 0 ||
jElem.closest('#Edit').length > 0;
}).plugin(...);
正如我之前所说,这里的解决方案可能毫无用处,但对于其他问题,这是一个非常好的选择
答案 6 :(得分:0)
如果我们想将相同的功能应用于多个选择器,则可以使用多个选择器选项。 我认为我们可以说此功能的使用类似于可重用性。编写一个jQuery函数,然后添加多个我们想要相同功能的选择器。
请看以下示例:
$( "div, span, .paragraph, #paraId" ).css( {"font-family": "tahoma", "background": "red"} );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>Div element</div>
<p class="paragraph">Paragraph with class selector</p>
<p id="paraId">Paragraph with id selector</p>
<span>Span element</span>
我希望它将对您有所帮助。 Namaste