jQuery索引和选择器:lt和:gt

时间:2010-11-17 14:45:49

标签: jquery jquery-selectors indexing css-selectors

如何选择器和gt工作?它们的顺序是一样的吗? (如果它们都在同一个选择器中)

我对这个问题需要两个答案。

1)以下行的结果不应该总是0 ???我问那些指数大于3且小于2的指数。有索引可能是:ix> 3& ix< 2同时!!

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

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

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

选择者的顺序不应该与结果不一致吗?

如果选择器lt不能正常工作,如果它是在gt之后或类似的东西!

其他信息:

  • 您可以在此处观看:http://jsfiddle.net/YQtRh/
  • 对于那些想知道第一行js行的结果是1的人。
  • 在示例中,第一行返回的td是最后一行(.text()== 4)

谢谢!

3 个答案:

答案 0 :(得分: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)

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

1)想象一下你的td包含5个元素。

  • 获取索引&gt; 3:获得1个元素。
  • 获取索引&lt; 2:获取1个元素,因为索引4的前一个元素现在是索引0。

2)在这种情况下

  • 获取索引&lt; 2:最多获得2个元素。
  • 获取索引&gt; 3在一组2个或更少的元素上:总是返回0。

答案 2 :(得分:1)

试试这个

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

由于

Sumesh