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