Як вибрати перший батьківський DIV за допомогою jQuery?


95
var classes = $(this).attr('class').split(' '); // this gets the current element classes

var classes = $(this).parent().attr('class').split(' '); // this gets the parent classes.

Батьком у вищезазначеній ситуації є анкор.

Якби я хотів отримати перший батьківський DIV у розмірі $ (this), як би виглядав код?

var classes = $(this).div:parent().attr('class').split(' '); // just a quick try.

* В основному я хочу отримати класи першого батьківського DIV в $ (this).

Дякую

Відповіді:


161

Використовуйте .closest()для пересування дерева DOM до вказаного селектора.

var classes = $(this).parent().closest('div').attr('class').split(' '); // this gets the parent classes.

10
parents("div")здійснює обхід і повертає всі батьківські div, які слід використовувати .eq(0)після нього, щоб переконатися, що він повертає лише той, який ви хочете
meo

3
Пам'ятайте, що краще використовувати продуктивність .parents('div').eq(0)- використання того гаманця CSS-селектора FOLLOWED by jQuery для фільтрації лише до першого елемента дасть вам невеликий приріст продуктивності - див. Розділ "Додаткові примітки" про jQuery: eq doc
Ноа Уитмор

@NoahWhitmore Виправлено. Використовується, closest()щоб не повертати всіх батьків, крім divбатьків.
Шеф

41

Використання .closest(), яке отримує перший елемент-попередник, який відповідає заданому селектору 'div':

var classes = $(this).closest('div').attr('class').split(' ');

Редагувати:

Як зазначив @Shef, .closest()поверне поточний елемент, якщо це теж DIV. Щоб це врахувати, .parent()спочатку використовуйте :

var classes = $(this).parent().closest('div').attr('class').split(' ');

5
.closest()буде відповідати самому собі, якщо $(this)є елементом DIV.
Шеф

@ Шеф, це була нова інформація для мене, дякую. Я відредагував свою відповідь, щоб відобразити це.
Тату Улманен

3
Ви можете просто використати.parents("div").eq(0)
meo

8

Це отримує батька, якщо це div. Тоді він отримує клас.

var div = $(this).parent("div");
var _class = div.attr("class");

1
@meo Ось що було запитання.
Даніель Вест,


0

два найкращих варіанти

$(this).parent("div:first")

$(this).parent().closest('div')

і звичайно ви можете знайти клас attr за

$(this).parent("div:first").attr("class")

$(this).parent().closest('div').attr("class")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.