Цепочные селекторы jQuery: lt и: gt
У меня есть таблица с более чем 9 строками.
Если я сделаю это: $('table tr:gt(3):lt(6)')
, я получу 3 или 6 элементов в конце и почему? Используются ли все селекторы для одного и того же первичного выбора или они применяются последовательно к различным выборам?
Ответы
Ответ 1
Они применяются последовательно, поэтому сначала вы отфильтровываете первые четыре элемента (:gt(3)
), затем вы отфильтровываете все элементы после шестого (:lt(6)
) элемента уже отфильтрованного набора.
Представьте себе этот HTML:
<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>
Затем выполните следующий jQuery:
$('br:gt(3):lt(6)').addClass('sel');
Теперь у вас будет:
<br/><br/>
<br/><br/>
<br class="sel"/><br class="sel"/>
<br class="sel"/><br class="sel"/>
<br class="sel"/><br class="sel"/>
<br/><br/>
Ответ 2
Я предлагаю вам вместо этого использовать метод slice().
http://docs.jquery.com/Traversing/slice#startend
$('table tr').slice(2, 5).addClass("something");
Ответ 3
Не совсем то, что вы думаете -
Рабочий демонстрационный пример
В принципе, второй фильтр применяется последовательно к согласованному набору первого фильтра.
Например, в таблице с 10 строками :gt(3)
будет фильтроваться к элементам 5 - 10, тогда <6 > будет применяться к 6 элементам, а не к фильтрации.
если вы добавите /edit к демо-URL, вы можете играть с селектором и сами убедиться. Если вы измените второй фильтр на :lt(2)
, вы получите строки 5 и 6, выделенные красным цветом
Ответ 4
По какой-то причине :lt(6)
будет игнорироваться в этом выборе, поэтому в этом случае он вернет все, что больше 3.
Однако, если вы переключите его, он будет работать как ожидалось
$('table tr:lt(6):gt(3)')
вернет 2 строки (только строки 4 и 5 находятся между 6 и 3).
** изменить: ** используя v.1.3.2
А также lt(6)
не игнорируется, а не просто работает, как я ожидал. Таким образом, :gt(3):lt(6)
фактически вернет 6 элементов (если у вас достаточно строк, то есть)