it-swarm.com.ru

Как найти родителя с известным классом в jQuery?

У меня есть <div>, в котором есть много других <div>s, каждый на своем уровне вложенности. Вместо того, чтобы давать каждому дочернему элементу <div> идентификатор, я лучше просто дам корневому <div> идентификатор. Вот пример:

<div class="a" id="a5">
  <div class="b">
    <div class="c">
      <a class="d">
      </a>
    </div>
  </div>
</div>

Если я напишу функцию в jQuery для ответа на класс d и хочу найти идентификатор для его родителя, класса a, как мне это сделать?

Я не могу просто сделать $('.a').attr('id');, потому что есть несколько классов as. Я мог бы найти идентификатор родителя родителя своего родителя, но это кажется плохим дизайном, медленным и не очень полиморфным (мне пришлось бы написать другой код для поиска идентификатора для класса c).

203
John Smith

Предполагая, что this является .d, вы можете написать

$(this).closest('.a');

closest метод возвращает самого внутреннего родителя вашего элемента, который соответствует селектору.

411
SLaks

Передайте селектор в функцию jQuery parent :

d.parents('.a').attr('id')

EDIT Хм, на самом деле ответ Слакса лучше, если вы хотите, чтобы ближайший предок соответствовал вашему селектору.

19
Drew Noakes

Вы можете использовать parent () , чтобы получить всех родителей с данным селектором.

Описание: Получить предков каждого элемента в текущем наборе соответствующих элементов, которые могут быть отфильтрованы по выбору.

Но parent () получит только первый родительский элемент.

Описание: Получить родительский элемент каждого элемента в текущем наборе соответствующих элементов, которые могут быть отфильтрованы по выбору.

jQuery parent () против родителей ()

И есть . ParentUntil () , который, я думаю, будет лучшим.

Описание: Получить предков каждого элемента в текущем наборе соответствующих элементов, но не включая элемент, сопоставленный селектором.

4
Amr Elgarhy