Як знайти батька з відомим класом в jQuery?


244

У мене <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');, тому що є кілька класів as. Я міг би знайти батьківський ідентифікатор батька, але це здається поганим дизайном, повільним та не дуже поліморфним (мені доведеться написати інший код для пошуку ідентифікатора для класу c).

Відповіді:


490

Якщо припустити, що thisце .d, ви можете написати

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

closestМетод повертає приховану батько вашого елемента , який відповідає селектору.


47
Зауважте, що улов мало: Якщо ваш початковий елемент теж відповідає запиту, ви не отримаєте батьківський елемент, а той самий елемент. Це може бути, а може і не потрібна поведінка. Якщо ні, я рекомендую це: $ (це) .parent (). Найближчий ('. A');
Risord

1
Дуже корисний. Я завжди використовую $ (this) .parent (). Parent (). Parent (), і я знав, що є краще рішення.
Ван'л Пахрін

28

Передайте селектор функції jQuery батьків :

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

РЕДАКЦІЯ Хм, насправді відповідь Слакса є вищою, якщо ви хочете лише найближчого предка, який відповідає вашому селектору.


8

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

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

Але parent () отримає лише перший батьківський елемент.

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

jQuery батьків () проти батьків ()

І є .parentsUntil (), який я думаю, що буде найкращим.

Опис: Отримати предків кожного елемента в поточному наборі відповідних елементів, аж до, але не включаючи елемент, відповідний селектором.


Він хоче лише одного батька, тому йому слід зателефонувати closest.
СЛАкс

2

Використовувати .parentsUntil ()

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

Це націлюватиметься на кожен батьківський елемент до досягнення відповідного батьківського елемента.
Дастін

0

Витягнуто з коментарів @ Resord вище. Цей працював на мене і більш схильний до питання.

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

Дякую

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.