可以对存储的选择器对象执行额外的jquery选择吗?

时间:2010-12-19 01:01:29

标签: jquery jquery-selectors

示例数据:

<input class="foo" special="yes" value="1" new="yes">
<input class="foo" special="no" value="2" new="yes">
<input class="foo" value="3" new="red">
<input class="foo" special="yes" value="4">
<input class="foo" value="5" new="yes">

现在是jquery:

var the_inputs = $("input.foo");

...会给我一个所有输入的jquery对象。

我也可以这样做:

var the_special_inputs = $("input.foo[special]");

...仅返回具有特殊属性的输入。

更进一步,我只能获得具有特殊属性的输入,其中它们的属性new为“yes”:

var the_special_inputs = $("input.foo[special][new='yes']");

但是,如果我只想使用'the_inputs'并创建var the_special_inputs而不做另一个选择器呢?在那里,如果我有存储的var:

var the_inputs = $("input.foo");

...有没有办法在存储的var上编写一个额外的选择器,它会给我与$("input.foo[special]");或上面的其他选项相同的结果但是只能使用先前存储的the_inputs

我尝试过的一些不起作用的东西:

$(the_inputs+"[special][new='yes']");
$("[special]",the_inputs);

有可能吗?

2 个答案:

答案 0 :(得分:11)

使用jQuery's .filter() method

var the_inputs = $("input.foo");
var the_special_inputs = the_inputs.filter("[special][new='yes']");

这将创建一个新的集合,原始集合缩减为与您传递的选择器匹配的集合,而无需进行额外的DOM选择。

还有另一种方法called .not(),它保留那些与选择器不匹配的方法。

答案 1 :(得分:1)

您也可以使用jQuery find()方法,但过滤效果要好得多:

var the_inputs = $("input.foo");
var the_special_inputs = the_inputs.find("[special][new='yes']");