2014-01-15 27 views
1

如何在不使用逗号分隔符的情况下搜索(jquery find)元素。 JSFiddle herejquery在选择器内部找到逻辑运算符

例子:

<div id="inputs"> 
    <input name="n1" value="v1" type="text" /> 
    <input name="n2" value="v2" type="checkbox" /> 
    <input name="n3" value="v3" type="button" /> 
    <input name="n4" value="v4" type="hidden" /> 
    <input name="n5" value="v5" type="text" /> 
    <input name="n6" value="v6" type="text" /> 
    <input name="n7" value="v7" type="text" /> 
    <input name="n8" value="v8" type="text" /> 
    <input name="n9" value="v9" type="text" /> 
    <input name="n10" value="v10" type="text" /> 
</div> 

1 - 我可以用下面的代码做到这一点:

​​

2 - 但我要如何使用,这是这样的:

$('#inputs') 
    .find('input[type="text"][name="n7" || "n8"]) 
    .val("found"); 

原因:只是好奇,认为可能会有性能差异(第二更快)。

+0

什么'$(“#输入输入:文本”)。过滤器('[NAME =‘N7’] ,[name =“n8”]')'? – Bergi

+4

这个问题已经被回答了[这里](http://stackoverflow.com/questions/2396596/jquery-selectors-logical-or),不可能不使用逗号做它 – tpbowden

+0

@Bergi感谢您的快速响应,它运行良好,但不是答案。 –

回答

6

如何在不使用逗号分隔符的情况下搜索元素。

您不能,多个选择器之间的逗号是唯一可用的OR运算符。

但是,您可以链中的搜索和使用逗号操作上只有一个级别:

$('#inputs input[type="text"]').filter('[name="n7"], [name="n8"]') 

这的确是更简洁(不重复),应该是更有效的为好。如果你真的想针对单个属性表达式匹配多个值,使用自定义过滤功能:

$('#inputs input:text').filter(function() { 
    var name = this.name; 
    return name=="n7" || name=="n8"; // or 
    return ~["n7","n8"].indexOf(this.name); // or 
    return /^n[78]$/.test(this.name); // or whatever 
}); 
+0

+ 1为使用'||'语法提供了一个很好的解决方案,但是如果开发人员仅仅为了避免逗号分隔语法(假设自定义过滤器函数没有提供额外的好处)而使用复杂的过滤器选项,我会感到非常惊讶。 – Nope

+0

@FrançoisWahl:当然,这个例子太微不足道了。我只是想指出过滤器谓词,用于需要javascript操作符,嵌套表达式或复杂逻辑的情况。 – Bergi