У меня очень простой список LI, и все они на одном уровне (ничего не вложен). Я хочу найти предыдущий элемент любого элемента, который является классом level1. По какой-то причине prev() не работает на элементах, когда элемент 'level1' больше одного брата. Я не хочу использовать prevAll(), потому что мне нужен только самый близкий li, который предшествует моему элементу и имеет класс level1.jquery .prev() странное поведение
<ul id="main-list">
<li class="level1" data-id="1" data-parent="none" id="recordsArray_1">Overview</li>
<li class="level2" data-id="4" data-parent="Overview" id="recordsArray_4">Benefits</li>
<li class="level2" data-id="2" data-parent="undefined" id="recordsArray_2">Core Concepts</li>
<li class="level2" data-id="3" data-parent="undefined" id="recordsArray_3">Access</li>
<li class="level3" data-id="5" data-parent="Access" id="recordsArray_5">Onboarding</li>
<li class="level1" data-id="12" data-parent="none" id="recordsArray_12">test top</li>
<li class="level2" data-id="10" data-parent="test top" id="recordsArray_10">test 1</li>
<li class="level2" data-id="14" data-parent="undefined" id="recordsArray_14">New Access</li>
<li class="level3" data-id="13" data-parent="New Access" id="recordsArray_13">test 2</li>
<li class="level1" data-id="6" data-parent="none" id="recordsArray_6">Underview</li>
<li class="level2" data-id="7" data-parent="Underview" id="recordsArray_7">coolpage1</li>
<li class="level3" data-id="9" data-parent="coolpage1" id="recordsArray_9">page level 3</li>
</ul>
<script>
var publishList = $('#main-list li');
$.each(publishList, function() {
var thisClass = $(this).attr('class');
var parentID = $(this).attr('data-parent');
var recordID = $(this).attr('data-id');
if (thisClass == 'level2') {
var thisParent = $(this).prev('.level1').html();
console.log(this);
}
});
</script>
консольный вывод:
Overview
undefined
undefined
test top
undefined
Underview
Что я делаю неправильно? Я ожидал, что prev() вернет обзор основных понятий, доступа и нового доступа, но они возвращаются не определенно. Есть ли недостаток в моей логике?
'.prev()' получить именно, что предыдущий родственный отфильтрованный селектором. Если предыдущий брат не соответствует, он не идет дальше. «Получите непосредственно предшествующий родственный элемент каждого элемента в наборе согласованных элементов, необязательно отфильтрованный селектором». – j08691
Prev только когда-либо возвращает объект непосредственно перед селектором в DOM. Ознакомьтесь с [документацией] (http://api.jquery.com/prev/) –
Добавлен jsFiddle - http://jsfiddle.net/y3ywr/3/ – RAC