Bagaimana cara memilih DIV orang tua pertama menggunakan 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.

Orang tua dalam situasi di atas adalah seorang ankor.

Jika saya ingin mendapatkan DIV orang tua pertama dari $ (this) seperti apa kodenya?

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

* Pada dasarnya saya ingin mendapatkan kelas dari orang tua DIV pertama $ (ini).

Terima kasih

Adam
sumber

Jawaban:

161

Gunakan .closest()untuk melintasi pohon DOM hingga selektor yang ditentukan.

var classes = $(this).parent().closest('div').attr('class').split(' '); // this gets the parent classes.
Shef
sumber
10
parents("div")sedang melintasi dan mengembalikan semua div induk yang harus Anda gunakan .eq(0)setelahnya untuk memastikan div hanya mengembalikan yang Anda inginkan
meo
3
Ingatlah bahwa lebih baik untuk kinerja untuk digunakan .parents('div').eq(0)- menggunakan selektor CSS dompet itu DIIKUTI oleh jQuery untuk memfilter hanya elemen pertama akan memberi Anda sedikit peningkatan kinerja - lihat bagian 'Catatan Tambahan' di jQuery: eq doc
Noah Whitmore
@NoahWhitmore Memperbaiki itu. Digunakan closest()agar tidak mengembalikan semua orang tua kecuali orang divtua.
Shef
41

Menggunakan .closest() , yang mendapatkan elemen leluhur pertama yang cocok dengan selektor yang diberikan 'div':

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

EDIT:

Seperti yang dicatat @Shef, .closest()akan mengembalikan elemen saat ini jika kebetulan itu adalah DIV juga. Untuk memperhitungkannya, gunakan .parent()dulu:

var classes = $(this).parent().closest('div').attr('class').split(' ');
Tatu Ulmanen
sumber
5
.closest()akan cocok dengan dirinya sendiri jika $(this)merupakan elemen DIV.
Shef
@Shef, itu info baru buat saya, terima kasih. Saya telah mengedit jawaban saya untuk mencerminkan ini.
Tatu Ulmanen
3
Anda cukup menggunakan.parents("div").eq(0)
meo
8

Ini mendapat induk jika itu adalah div. Kemudian mendapat kelas.

var div = $(this).parent("div");
var _class = div.attr("class");
Esben
sumber
1
@meo Itulah pertanyaan yang diajukan.
Daniel West
3

Tetap sederhana!

var classes = $(this).parent('div').attr('class');
Daniel West
sumber
0

dua dari opsi terbaik adalah

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

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

dan tentu saja Anda dapat menemukan atribut kelas dengan

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

$(this).parent().closest('div').attr("class")
Junaid Masood
sumber