Как найти n-го родителя элемента с помощью jquery

Я хочу найти n-й родительский элемент данного элемента и получить доступ к атрибутам родителя.

<div id='parent1'><br/>
  <div id='parent2'><br/>
       <span><p id='element1'>Test</p></span><br/>
  </div><br/>
  <div id='parent3'><br/>
       <span><p id='element2'>Test</p></span><br/>
  </div><br/>
</div>

Я хочу получить доступ к третьему родительскому элементу element1 без использования

$('#element1').parent().parent().parent()

Любая помощь будет оценена


person Rakhitha Nimesh    schedule 18.11.2011    source источник
comment
Возможный дубликат Как получить родительский элемент n-го уровня в jQuery?   -  person Frédéric Hamidi    schedule 18.11.2011


Ответы (4)


Вы можете использовать .parents() и .eq():

$('#element1').parents().eq(2);

http://jsfiddle.net/infernalbadger/4YmYt/

person Richard Dalton    schedule 18.11.2011

parents() возвращает список, так что это работает:

$('#element1').parents()[2];
person DidThis    schedule 16.10.2014

использовать:

$('#element1').closest('#parent1');
person Alex    schedule 18.11.2011
comment
Если вы знаете идентификатор, нет смысла использовать closest - person Richard Dalton; 18.11.2011
comment
Благодарю. этот код достаточно хорош для текущего примера. Но я хочу искать его динамически, как 3-й родитель или 4-й родитель. - person Rakhitha Nimesh; 18.11.2011
comment
@ Ричард Далтон, как насчет $('#element1').closest('#parent1').hasClass('whatever'); - person tmatyo; 02.04.2015

Вы можете сделать небольшой плагин, чтобы позаботиться об этом:

$.fn.nthParent = function(n){
    var p = this;
    for(var i=0;i<n;i++)
        p = p.parent();
    return p;
}

а затем используйте его как:

$('#element1').nthParent(3);
person gion_13    schedule 18.11.2011