jQuery orang tua dari orang tua

93

Saat ini saya mencoba menemukan induk dari orang tua suatu elemen. Saya memiliki tautan yang diklik yang ada di a <td>, dan saya ingin mendapatkan <tr>objeknya.

Mengapa "$ (this) .parent (). Parent ()" tidak berfungsi? Apa yang akan?

Terima kasih,
Brendan

Edit: Tampaknya kesalahan dalam sintaksis saya membuat semuanya menjadi kacau. "$ (this) .parent (). parent ()" sebenarnya berfungsi, tetapi saya akhirnya memilih $ (this) .closest ('tr') "karena sepertinya solusi yang paling efisien.

bloudermilk.dll
sumber
1
bisakah Anda memposting kode sehingga kami dapat melihat mengapa pemilih induk Anda tidak berfungsi?
TStamper

Jawaban:

221

Cara terbaik mungkin menggunakan closest:

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

Lihat dokumentasinya :

Cara terdekat bekerja dengan terlebih dahulu melihat elemen saat ini untuk melihat apakah cocok dengan ekspresi yang ditentukan, jika demikian maka elemen itu sendiri dikembalikan. Jika tidak cocok maka itu akan terus melintasi dokumen, induk oleh induk, sampai elemen ditemukan yang cocok dengan ekspresi yang ditentukan. Jika tidak ada elemen yang cocok ditemukan maka tidak ada yang akan dikembalikan.

Paolo Bergantino
sumber
20

Ini harus berhasil. Anda juga dapat mencoba $ (this) .parents (tag), di mana tag adalah tag yang ingin Anda temukan.

Sebagai contoh:

$(this).parents("tr:first")

Akan menemukan tr terdekat "ke atas rantai".

Philippe Leybaert
sumber
9

Itu seharusnya berhasil ... Anda mungkin mencoba

$(this).parents(':eq(1)');

The .parents (selector) mengatakan dapatkan semua leluhur yang cocok dengan selektor

dan: eq (1) mengatakan find the oneth (zero-indexed, so the second) elemen dalam daftar

Lathan
sumber
Anda dapat mencoba mengingatkan ini, untuk memastikan itu adalah tag anchor html. Coba lakukan: alert ('anchor html (' + $ (this) .html () + ')');
Lathan
6

Cuplikan ini telah bekerja untuk saya sebelumnya:

$(this).parent().parent(); 

Posting beberapa kode agar kami dapat melihat apakah mungkin ada masalah lain di suatu tempat ...

Gabriel Hurley
sumber
Saya setuju dengan ini. Saya dapat menggunakan $(this).parent().parent()tanpa masalah
DrewT
5

juga coba

$(this).closest('div.classname').hide();
Dilip
sumber
2

Jika Anda memiliki jenis id / class untuk orang tua, Anda dapat menggunakan orang tua () tetapi itu akan memberi Anda semua orang tua hingga <body> kecuali Anda memfilter () atau menghentikannya dengan cara lain seperti

$(this).parents('.myClass');

Semoga ini bisa membantu seseorang :)

abhilashv.dll
sumber
1

Cobalah membungkus $ (this) .parent () menjadi objek jQuery seperti $ ($ (this) .parent ()) Saya sering merasa perlu melakukan ini untuk memastikan saya memiliki objek jquery yang valid. Dari sana Anda harus bisa menghubungi orang tua, atau mungkin menggunakan prev ().

kristian nissen
sumber
8
Ini sama sekali tidak ada gunanya. Yang Anda lakukan hanyalah membuang-buang waktu dengan membuat objek jQuery lain ...
James
1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}
Alex Polo
sumber
0

.closest() Tidak selalu merupakan pilihan terbaik terutama jika Anda memiliki konstruksi elemen yang sama.

<div>
    <div>
        <div>
        </div>
    </div>
</div>

Anda dapat melakukan orang tua dari orang tua dan itu sangat mudah:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

dll.

Webapper
sumber