Jak wybrać pierwszego rodzica DIV za pomocą jQuery?

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

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

Rodzicem w powyższej sytuacji jest ankor.

Gdybym chciał uzyskać DIV pierwszego rodzica $ (this), jak wyglądałby kod?

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

* Zasadniczo chcę uzyskać klasy pierwszego rodzica DIV $ (this).

dzięki

Adam
źródło

Odpowiedzi:

161

Służy .closest()do przechodzenia w górę drzewa DOM do określonego selektora.

var classes = $(this).parent().closest('div').attr('class').split(' '); // this gets the parent classes.
Shef
źródło
10
parents("div")przechodzi i zwraca wszystkie nadrzędne elementy div, których należy użyć .eq(0)po nim, aby upewnić się, że zwróci tylko ten, który chcesz
meo
3
Pamiętaj, że lepiej jest używać wydajności .parents('div').eq(0)- użycie tego selektora CSS torebki PODĄŻANE przez jQuery do filtrowania tylko do pierwszego elementu da niewielki wzrost wydajności - zobacz sekcję ``
Noah Whitmore
@NoahWhitmore Naprawiono to. Używany, closest()aby nie zwrócił wszystkich rodziców oprócz divrodzica.
Shef
41

Użyj .closest(), która pobiera pierwszy element nadrzędny, który pasuje do podanego selektora 'div':

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

EDYTOWAĆ:

Jak zauważyła @Shef, .closest()zwróci bieżący element, jeśli okaże się, że jest to również DIV. Aby to wziąć pod uwagę, użyj .parent()najpierw:

var classes = $(this).parent().closest('div').attr('class').split(' ');
Tatu Ulmanen
źródło
5
.closest()dopasuje się, jeśli $(this)jest elementem DIV.
Shef
@Shef, to była dla mnie nowa informacja, dzięki. Zredagowałem moją odpowiedź, aby to odzwierciedlić.
Tatu Ulmanen
3
możesz po prostu użyć.parents("div").eq(0)
meo
8

To dostaje rodzic, jeśli jest to div. Wtedy zyskuje klasę.

var div = $(this).parent("div");
var _class = div.attr("class");
Esben
źródło
1
@meo Oto pytanie.
Daniel West,
3

Nie komplikuj!

var classes = $(this).parent('div').attr('class');
Daniel West
źródło
0

dwie najlepsze opcje to

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

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

i oczywiście możesz znaleźć atrybut klasy przez

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

$(this).parent().closest('div').attr("class")
Junaid Masood
źródło