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

发布于 2024-10-03 11:16:29 字数 638 浏览 3 评论 0原文

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

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

1)下面一行的结果不应该总是0???我要求那些 td wich 索引大于 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

选择器的顺序不应该与结果无关吗?

就像如果选择器 lt 在 gt 或类似的东西之后就无法工作!

附加信息:

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

谢谢!

迭戈

How do the selectors lt and gt work?? Is the same the order they are put? (if they are both in the same selector)

I need two answers for this question.

1) The result of the following line shouldn't ALWAYS be 0??? I'm asking those td wich index be greater than 3 AND lower than 2. There is index that could be: ix > 3 & ix < 2 at the same time!!

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

2) It turns out that when I change the order of the selectors gt and lt it starts working good. The result of the following line is 0.

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

Shoudn't the order of the selectors be indiferent to the result?

It is like if selector lt wont work if it is after a gt or something like that!

Additional info:

  • You can watch this here: http://jsfiddle.net/YQtRh/
  • For those who wonder what is the result of the first js line is 1.
  • In the example that td returned by the first line is the last one (.text() == 4)

Thanks!

Diego

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼泪淡了忧伤 2024-10-10 11:16:29

问题在于 jQuery 按顺序运行其选择器,而不是将它们编译为一个选择器。所以 :gt(3):lt(2) 的意思是“查找集合中索引大于 3 的所有元素,然后在返回的集合中查找索引小于 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) on原始集合给出以下结果:

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

对此运行 :gt(3) 显然会从集合中删除所有元素,因为它们分别具有索引 0 和 1,且都不大于 3 。

The issue is that jQuery runs its selectors sequentially, rather than compiling them into one selector. So :gt(3):lt(2) means "find all the elements in the set with an index of more than 3, then, in the returned set, find all elements with an index less than 2". Turning it round td:lt(2):gt(3) changes the order of the logic, so gives a different result.


In your example:

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

:gt(3) gives only the final element because it is the only one with an index greater than 3. So you have the following selection (from the Chrome console):

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

Running :lt(2) on that obviously will have no effect, because the one element in the set has an index of 0, which is below 2.

Doing :lt(2) on the original set gives the following result:

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

Running :gt(3) on this will obviously remove all the elements from the set, because they have the indexes 0 and 1 respectively, neither of which is greater than 3.

︶葆Ⅱㄣ 2024-10-10 11:16:29

试试

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

谢谢苏梅什

这个

Try this

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

Thanks

Sumesh

孤凫 2024-10-10 11:16:29

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

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

  • 获取索引> 3:获取1个元素。
  • 获取索引< 2 : 获取 1 个元素,因为索引 4 的前一个元素现在是索引 0。

2) 在这种情况下

  • 获取索引 < 2 :最多获取 2 个元素。
  • 获取索引> 3 在 2 个或更少元素的集合上:始终返回 0。

The indexes are re-indexed after a first filtering, this is sequential.

1) Imagine your td contains 5 elements.

  • Get indexes > 3 : Get 1 element.
  • Get indexes < 2 : Get 1 element cause the previous element of index 4 is now index 0.

2) In this case

  • Get indexes < 2 : Get a maximum of 2 elements.
  • Get indexes > 3 on a set of 2 elements or less : always returns 0.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文