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

Die*_*ego 5 indexing jquery css-selectors jquery-selectors

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

这个问题我需要两个答案.

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

$("tr").find("td:gt(3):lt(2)").length
Run Code Online (Sandbox Code Playgroud)

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

$("tr").find("td:lt(2):gt(3)").length
Run Code Online (Sandbox Code Playgroud)

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

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

附加信息:

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

谢谢!

迭戈

lon*_*day 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>
Run Code Online (Sandbox Code Playgroud)

:gt(3) 仅提供最终元素,因为它是索引大于3的唯一元素.因此,您有以下选择(来自Chrome控制台):

[<td>?4?</td>?]
Run Code Online (Sandbox Code Playgroud)

:lt(2)在那上面运行显然没有效果,因为集合中的一个元素的索引为0,低于2.

这样做:lt(2)对原设定提供了以下结果:

[<td>?0?</td>?, <td>?1?</td>?]
Run Code Online (Sandbox Code Playgroud)

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