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

244

У меня <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');, потому что есть несколько классов a. Я мог бы найти идентификатор родителя родителя своего родителя, но это кажется плохим дизайном, медленным и не очень полиморфным (я должен был бы написать другой код для нахождения идентификатора для класса c).

Джон Смит
источник

Ответы:

490

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

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

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

SLaks
источник
47
Обратите внимание, что есть небольшая ловушка: если ваш начальный элемент совпадает с запросом, вы не получаете родительский элемент, но тот же элемент вместо этого. Это может быть или не быть желанным поведением. Если нет, я рекомендую это: $ (this) .parent (). Closest ('. A');
Рисорд
1
Очень полезно. Я всегда использую, чтобы делать $ (this) .parent (). Parent (). Parent (), и я знал, что есть лучшее решение.
Wang'l Pakhrin
28

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

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

РЕДАКТИРОВАТЬ Хм, на самом деле ответ Slaks лучше, если вы хотите, чтобы ближайший предок соответствовал вашему селектору.

Дрю Ноакс
источник
8

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

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

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

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

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

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

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

Амр Элгархи
источник
Он хочет только одного родителя, поэтому он должен позвонить closest.
SLaks
2

Используйте .parentsUntil ()

$(".d").parentsUntil(".a");
jai3232
источник
Это будет предназначаться для каждого родительского элемента, пока не будет достигнут соответствующий родительский элемент.
Дастин Холстед
0

Извлечено из комментариев @ Resord выше. Этот работал для меня и более тесно связан с вопросом.

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

Спасибо

Анжана Силва
источник