2010-11-17 76 views
5

选择器lt和gt如何工作?他们的订单是一样的吗? (如果他们都在同一个选择器中)jQuery索引和选择器:lt和:gt

我需要两个答案来解决这个问题。

1)以下行的结果不应总是为0?我要求那些指数大于3且低于2.有索引可能是:ix> 3 & ix < 2在同一时间!

$("tr").find("td:gt(3):lt(2)").length 

2)事实证明,当我改变选择器gt和lt的顺序时,它开始工作良好。以下行的结果为0.

$("tr").find("td:lt(2):gt(3)").length 

没有选择器的顺序对结果没有影响吗?

这就好像选择器不能工作,如果它是在GT之后或类似的东西!

附加信息:

  • 你可以在这里看这个:http://jsfiddle.net/YQtRh/
  • 对于那些谁不知道什么是第一个JS行的结果为1
  • 在这个例子中,运输署由返回第一行是最后一行(.text()== 4)

谢谢!

迭戈

回答

5

的问题是,jQuery的顺序运行其选择,而不是汇编成一个选择。因此:gt(3):lt(2)的意思是“找到索引大于3的集合中的所有元素,然后在返回的集合中找到索引小于2的所有元素”。轮到td:lt(2):gt(3)改变逻辑的顺序,所以给出不同的结果。


在您的例子:

<table> 
    <tr> 
     <td>0</td> 
     <td>1</td> 
     <td>2</td> 
     <td>3</td> 
     <td>4</td> 
    </tr> 
</table> 

:gt(3)只给出最终的元素,因为它是唯一一个与指数大于3.所以,你有以下选择(从Chrome控制台):

[<td>​4​</td>​] 

运行上:lt(2)显然将没有任何效果,因为在该组中的一个元件具有的索引为0,这是低于2。

在原设定做:lt(2)给出以下结果:

[<td>​0​</td>​, <td>​1​</td>​] 

运行在此:gt(3)显然会从集合中删除所有的元素,因为它们具有索引0和1分别,这两者都不是大于3.

1

索引在第一次过滤后重新索引,这是顺序的。

1)假设你的td包含5个元素。

  • 获取索引> 3:获取1个元素。
  • 获取索引< 2:获取1个元件引起指数4的前一个元素现在是索引0

2)在这种情况下

  • 获取索引< 2:获取最大2元素。上的一组2个元件或更少的
  • 获取索引> 3:始终返回0
0

尝试此

$("tr").find("td").slice(startindex,endindex) 

由于

Sumesh