链接jQuery选择器:lt和:gt

问题描述:

我有一个超过9行的表。链接jQuery选择器:lt和:gt

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

它们是按顺序应用的,所以首先您将过滤掉前四个元素(: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/> 
+5

请注意,“:lt(n)”和“:lt(n)”选择器是0索引且不包含在内。 – Blixt 2009-07-16 12:39:17

+0

正式指出,谢谢。 – glmxndr 2009-07-16 12:46:31

+0

谢谢先生,非常有帮助! – GianFS 2013-01-08 04:13:43

出于某种原因:lt(6)将在选择被忽略,因此它会在这个缩影中返回大于3的所有内容。

然而,如果切换过来,它会按预期

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

将返回2排工作(只有行4和5是6之间和3)。

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

而且也lt(6)不会被忽略,不只是工作,我期望它。所以:gt(3):lt(6)实际上会返回6个元素(如果你有足够的行,那就是)

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

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

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

不太你可能会觉得 -

Working Demo

基本上,应用第二过滤器顺序,以匹配集的第一个过滤器。

例如,在一个有10行的表上,:gt(3)将过滤到元素5-10,然后:lt(6)将应用于这6个元素,而不是过滤任何。

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