Выберите Nth предыдущего брата в jQuery?
Я пытаюсь настроить свой селектор jQuery, но я не совсем уверен, как мне его писать.
У меня есть неупорядоченный список, который выглядит примерно так:
<ul>
<li>something</li>
<li>something</li>
<li>something</li>
<li>something</li>
<li class="last">something</li>
</ul>
Теперь я знаю, хочу ли я выбрать последнего ребенка, я могу это сделать, используя либо "ul li.last", либо "ul.li:last", но скажу, если бы я хотел второй от последнего или третьего или 20-го? Теперь я бы это сделал?
Ответы
Ответ 1
Вы используете eq
:
$('ul li').eq(X);
Где X - индекс, основанный на 0, какого элемента вы хотите. Вы также можете использовать селекторную форму:
$('ul li:eq(X)');
И вы также можете добиться аналогичного результата, используя nth-child
:
$('ul li:nth-child(X)');
В документации есть что сказать о разнице между nth-child
и eq
:
Пока: eq (index) соответствует только одному элементу, это соответствует более чем одному: по одному для каждого родителя с индексом. Множество для каждого родителя с четным, нечетным или уравнением. Указанный индекс является одноиндексированным, в отличие от: eq(), который начинается с нуля.
Итак, выполнив $('ul li').eq(19);
, вы получите единственный 20-ий сопоставленный элемент запроса (так что если в документе будет несколько списков, это не даст вам "всех девятнадцати детей", а $('ul li:nth-child(20)');
получит вы являетесь отдельным элементом 20-го списка соответствия каждого <ul>
в документе.
ИЗМЕНИТЬ
Чтобы сделать что-то наподобие "от второго до последнего", разумный способ сделать это:
var $ul = $('#mylist > li');
var $el = $ul.eq($ul.length-2);
Но вы должны, вероятно, сделать проверку, чтобы убедиться, что длина-2 не меньше 0.
Ответ 2
Вы хотите, чтобы третий был последним?
var $ul = $("ul li");
$ul.find(":eq(" + Math.max(0, $ul.length - 3) + ")");
Быстрое объяснение: длина $ul (которая является объектом jQuery) - это количество ликов. Таким образом, вы можете использовать это вместе с селектором ": eq (n)", чтобы получить li с нужным индексом.
Я использовал Math.max в случае, если список слишком короткий (менее 3 литов).
Это также будет работать, но это, очевидно, не самый лучший способ:
var $ul = $("ul li:last").prev().prev();
Ответ 3
Для третьего и двадцатого вы можете сделать ul li:eq(3)
и ul li:eq(20)
. Во-вторых, вы можете что-то сделать с параметром nth-child
equation
, хотя я не уверен.
Ответ 4
alert($('ul li').eq(3).text());
Это будет предупреждать текст третьего элемента списка.
Ответ 5
Команда jQuery добавила эту функцию в версию 1.9
Вы можете прочитать об этом на http://api.jquery.com/nth-last-child-selector/