Выберите 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());

Это будет предупреждать текст третьего элемента списка.