Найти ближайшего родителя в отношении (а не только внутри) контекста
Со следующим html
<ul id="accordion">
<li>
<ul>
<li><h3>title</h3></li>
</ul>
</li>
<li>
<ul>
<li><h3>title</h3></li>
</ul>
</li>
<li>
<ul>
<li><h3>title</h3></li>
</ul>
</li>
</ul>
У меня внешний ul хранится в переменной
var acc = $("#accordion")[0]
в общем случае я просто передал элемент DOM и не могу обязательно указать селектор
Когда щелкают h3, я хочу получить верхний уровень li, который его содержит. В общем случае может быть какая-либо разметка между аккордеоном ul и элементом, который я хочу получить, и между элементом, который нужно выбрать, и h3... но у меня будет селектор, который позволит мне добраться до элемента из аккордеона с помощью селектора ">".
например, var items = $(">li", acc);
Проблема в том, что когда я начинаю с h3, на который нажали ("this" внутри обработчика щелчка), трудно найти конкретный элемент.
$(this).closest(">li", acc);
возвращает пустой jQuery (может быть, ошибка? хотя трудно определить, что означает ">" в этом случае, где элемент верхнего уровня является динамическим)
$(this).parents(">li")
не позволяет устанавливать контекст, поэтому потенциально может вернуть слишком много элементов
Есть ли способ сделать то, что я хочу?
* edit: html теперь делает проблему яснее
4 ответа
$(">li",acc).has(this)
работает в целом; установка контекста в исходном jQuery, кажется, единственное место, где стартовый селектор с ">" работает в jQuery
Как насчет $(h3).closest(".item");
? Согласно "ближайшей" документации, он будет проходить DOM вверх от текущего узла, пока не найдет узел, соответствующий вашему селектору.
Пойдите другим путем, чтобы гарантировать отношения ребенка:
acc.children('li').has(this);