jquery在选择器中查找逻辑运算符

时间:2014-01-15 21:19:29

标签: javascript jquery

如何在不使用逗号分隔符的情况下搜索(jquery find)元素。 JSFiddle here

示例:

<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-我可以使用以下代码执行此操作:

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

2-但我想如何使用它就像:

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

原因:只是好奇并认为可能存在性能差异(第二种更快)。

1 个答案:

答案 0 :(得分: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
});