链接jQuery选择器:lt和:gt

我有一个超过9行的表。

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

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

想象一下这个HTML:

 











然后执行以下jQuery:

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

你现在将拥有:

 











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

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

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

你不怎么想 –

工作演示

基本上,第二滤波器顺序地应用于第一滤波器的匹配组。

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

如果您添加/编辑演示URL,您可以使用选择器并亲自查看。 如果将第二个filter更改为:lt(2) ,则会以红色突出显示第5行和第6行

出于某种原因:lt(6)在该选择中将忽略:lt(6) ,因此它将在此intsance中返回大于3的所有内容。

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

 $('table tr:lt(6):gt(3)') 

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

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

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