Ответ 1
Try:
$('li.current_sub').prevAll("li.par_cat:first");
Протестировано с помощью вашей разметки:
$('li.current_sub').prevAll("li.par_cat:first").text("woohoo");
заполнит ближайший предыдущий li.par_cat
"woohoo".
вот грубый html, с которым я работаю:
<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li> // this is the single element I need to select
<li class="sub_cat"></li>
<li class="sub_cat"></li>
<li class="sub_cat current_sub"></li> // this is where I need to start searching
<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li>
Мне нужно перейти от .current_sub
, найти ближайший предыдущий .par_cat
и сделать материал для него.
.find("li.par_cat")
возвращает всю загрузку .par_cat
(у меня около 30 на странице). Мне нужен целевой сингл.
Поистине буду признателен за любые советы:)
Try:
$('li.current_sub').prevAll("li.par_cat:first");
Протестировано с помощью вашей разметки:
$('li.current_sub').prevAll("li.par_cat:first").text("woohoo");
заполнит ближайший предыдущий li.par_cat
"woohoo".
Try
$('li.current_sub').prev('.par_cat').[do stuff];
Использование prevUntil() позволит нам получить далекого брата без необходимости получать все. У меня был особенно длинный набор, который был слишком интенсивным с использованием prevAll().
var category = $('li.current_sub').prev('li.par_cat');
if (category.length == 0){
category = $('li.current_sub').prevUntil('li.par_cat').last().prev();
}
category.show();
Это соответствует первому предшествовавшему брату, если он соответствует, в противном случае он получает дочерний элемент, предшествующий тому, который соответствует, поэтому мы просто создаем резервную копию еще одним символом prev(), чтобы получить желаемый элемент.
Я думаю, что во всех ответах чего-то не хватает. Я предпочитаю использовать что-то вроде этого
$('li.current_sub').prevUntil("li.par_cat").prev();
Сохраняет, что вы не добавляете: сначала внутри селектора, и его легче читать и понимать. Кроме того, метод prevUntil() имеет более высокую производительность, чем использование prevAll()