我有一个超过9行的表。
如果我这样做:$('table tr:gt(3):lt(6)')
,我最后会收到3或6个元素,为什么?是否所有选择器都应用于相同的主选择,或者它们是否连续应用于不同的选择?
答案 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个元素(如果你有足够的行,那就是)