Найти ближайшего родителя в отношении (а не только внутри) контекста

Со следующим 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);
jQuery(this).parents('li:last');
Другие вопросы по тегам