Индекс jQuery и селекторы :lt и :gt

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

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

1) Результат следующей строки не должен ВСЕГДА быть 0??? Я прошу тех td, индекс которых больше 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)

Спасибо!

Диего


person Diego    schedule 17.11.2010    source источник


Ответы (3)


Проблема в том, что 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.

person lonesomeday    schedule 17.11.2010

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

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

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

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

  • Получить индексы ‹ 2 : получить максимум 2 элемента.
  • Получить индексы> 3 для набора из 2 элементов или менее: всегда возвращает 0.
person Jean-Bernard Jansen    schedule 17.11.2010

Попробуй это

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

Спасибо

Сумеш

person Sumesh    schedule 18.06.2014