Как найти родителя с известным классом в jQuery? - PullRequest
206 голосов
/ 17 марта 2011

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

Ответы [ 4 ]

416 голосов
/ 17 марта 2011

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

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

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

20 голосов
/ 17 марта 2011

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

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

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

5 голосов
/ 17 марта 2011

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

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

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

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

jQuery parent () по сравнению с родителями()

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

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

0 голосов
/ 23 июля 2018

Использовать .parentsUntil ()

$(".d").parentsUntil(".a");
...