链接jQuery选择器:lt和:gt

时间:2009-07-16 12:23:09

标签: jquery jquery-selectors chaining

我有一个超过9行的表。

如果我这样做:$('table tr:gt(3):lt(6)'),我最后会收到3或6个元素,为什么?是否所有选择器都应用于相同的主选择,或者它们是否连续应用于不同的选择?

4 个答案:

答案 0 :(得分:30)

它们是按顺序应用的,所以首先你将过滤掉前四个元素(:gt(3)),然后你将过滤掉已经过滤的集合的第六个(:lt(6))元素之后的所有元素

想象一下这个HTML:

<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>

然后执行以下jQuery:

$('br:gt(3):lt(6)').addClass('sel');

您现在将拥有:

<br/><br/>
<br/><br/>
<br class="sel"/><br class="sel"/>
<br class="sel"/><br class="sel"/>
<br class="sel"/><br class="sel"/>
<br/><br/>

答案 1 :(得分:26)

我建议你改用slice()方法。

http://docs.jquery.com/Traversing/slice#startend

$('table tr').slice(2, 5).addClass("something");

答案 2 :(得分:4)

不是你想的那样 -

<强> Working Demo

基本上,第二个过滤器按顺序应用于第一个过滤器的匹配组。

例如,在包含10行的表格中,:gt(3)将过滤到元素5 - 10,然后:lt(6)将应用于6个元素,而不会过滤任何元素。

如果您将 / edit 添加到演示网址,您可以使用选择器自行查看。如果您将第二个过滤器更改为:lt(2),则会以红色突出显示第5行和第6行

答案 3 :(得分:1)

由于某种原因{@ 1}}将在该选择中被忽略,因此它将返回此intsance中大于3的所有内容。

但是,如果您将其切换,它将按预期工作

:lt(6)

将返回2行(仅第4行和第5行介于6和3之间)。

**编辑:**使用v.1.3.2

而且,$('table tr:lt(6):gt(3)') 不会被忽视,而不仅仅是按照我的预期工作。所以lt(6)实际上将返回6个元素(如果你有足够的行,那就是)