Индекс jQuery и селекторы: lt и: gt - PullRequest
5 голосов
/ 17 ноября 2010

Как работают селекторы lt и gt ??Это тот же порядок, что и они?(если они оба находятся в одном и том же селекторе)

Мне нужны два ответа на этот вопрос.

1) Результат следующей строки не должен ВСЕГДА быть 0 ???Я спрашиваю те тд, у которых индекс больше 3 и меньше 2. Существует индекс, который может быть: ix> 3 и ix <2 одновременно !! </p>

$("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)

Спасибо!

Diego

Ответы [ 3 ]

5 голосов
/ 17 ноября 2010

Проблема в том, что 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 голос
/ 18 июня 2014

Попробуйте это

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

Спасибо

Сумеш

1 голос
/ 17 ноября 2010

Индексы переиндексируются после первой фильтрации, это последовательно.

1) Представьте, что ваш td содержит 5 элементов.

  • Получить индексы> 3: Получить 1 элемент.
  • Получить индексы <2: Получить 1 элемент, поскольку предыдущий элемент индекса 4 теперь имеет индекс 0. </li>

2) В этом случае

  • Получить индексы <2: получить максимум 2 элемента. </li>
  • Получить индексы> 3 для набора из 2 элементов или менее: всегда возвращает0.
...