ближайший узел предка в jQuery

В моем опыте javascript я обнаружил, что это очень распространенная задача: «Поиск ближайшего предка элемента с некоторым условием (имя тега, класс, ...)». Может ли функция ancestor ( elem , selector ) { var $ elem = $ ( elem ). parent (); while ( $ elem . size () > 0 ) { if ( $ elem . is ( selector ) ) возвращает $ elem ; else $ elem = $ elem . parent (); } return null ; } () метод jquery выполняет работу? Порядок возвращаемых элементов родителей () предсказуем? Является ли сверху или снизу вверх? На данный момент я использую эту служебную функцию:

closest()

Может ли кто-нибудь сказать мне, есть ли умный способ выполнить эту работу?

javascript,jquery,dom,

13

Ответов: 4


20 принят

Изменить : поскольку jQuery 1.3, это было встроено в качестве функции. например:<div id="a"> <div id="b"> <p id="c"> <a id="d"></a> </p> </div> </div>$('#d').parents("div:first");


yep - родители () пересекают дерево.

closest

<div id="a"> <div id="b"> <p id="c"> <a id="d"></a> </p> </div> </div> выберет div b.


16

Добавляем к ответу @ nickf :

jQuery 1.3 упростил эту задачу .$('#d').closest("div"); // returns [ div#b ]

Учитывая DOM:

closest

Ты можешь сделать:

parents

[ Ближайший возвращает] набор элементов, содержащий самый близкий родительский элемент, который соответствует указанному селектору, включенный исходный элемент.


3

Вы должны использовать closest, потому parentsчто не дадите вам результат, который вы ожидаете, если работаете с несколькими элементами. Например, предположим, что у вас есть это:

    <div id="0">
        <div id="1">test with <b>nested</b> divs.</div>
        <div id="2">another div.</div>
        <div id="3">yet <b>another</b> div.</div>
    </div>

и вы хотите добавить класс к divs, у которых есть <b>элемент как их непосредственный ребенок (т.е. 1 и 3). Если вы используете $('b').parents('div'), вы получаете divs 0, 1 и 3. Если вы используете $('b').parents('div:first'), вы получаете только div 1. Чтобы получить 1 и 3, но не 0, вы должны использовать $('b').closest(elem).


3

ближайший () начинается с текущего элемента, если родитель, которого вы ищете, имеет тот же тег, что и текущий (например, оба являются div), используйте parent (). closeest ()

JavaScript, JQuery, дом,
Похожие вопросы