kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 Rooster
Rooster
Question

Cara yang lebih efisien untuk melakukan parent().parent().parent() dll di jquery

Dalam skrip yang saya tulis ini, saya menemukan diri saya menggunakan .parent() hingga tujuh kali berturut-turut untuk mendapatkan elemen. Meskipun ini berhasil, sepertinya ada cara yang lebih mudah untuk melakukan hal ini/fungsi yang tidak saya sadari. Adakah ide selain kelas/id yang lebih spesifik pada lebih banyak elemen?

Pada dasarnya, pertanyaan saya bermuara pada pengaksesan div dengan id outer ketika saya memiliki referensi ke span dengan id 'innerSpan' dalam html di bawah ini:

<div id='outer'>
    <a href="some_url">
        <span id="inner">bla bla</span>
    </a>
</div>

Jadi saat ini, saya akan melakukan sesuatu seperti ini:

var outer = $('#inner').parent().parent()

dan itu akan menjadi gila dengan elemen yang sangat bersarang.

Contoh lain:

Ini html saya:

<div id="options_right">
            <table id="product_options_list" class="table table-bordered">

            <tbody id="1">
                <tr>
                    <td>
                        <select name="option_1_val[0]" class="option_table_select">
                            <option value="Red">Red</option>
                            <option value="Blue">Blue</option>
                            <option value="Green">Green</option>
                            </select>
                    </td>
                    <td>
                        <table class="table sub_options" id="0">
                            <tbody>
                            <tr>
                                <td>
                                    <select name="option_1_sub[0][]" class="option_table_select  sub_option_select">
                                        <option value="">None</option>
                                        <option value="2">Size</option>
                                    </select>
                                    <div class="sub_option_value_holder">
                                        <select name="option_1_sub_val[0][]" class="sub_option_values" style="display:none;"></select>
                                    </div>
                                </td>
                                <td>
                                    <a href="#" class="remove_sub_option btn btn-primary">Remove</a>
                                </td>
                                <td>
                                    <a href="#" class="add_sub_option btn btn-primary">Add Another</a>
                                </td>
                            </tr>
                            </tbody>
                        </table>
                    </td>

dan skrip saya. saya menulis sebuah fungsi dan perlu meneruskannya id dari baris utama tbody serta id tabel sekunder sehingga saya dapat menambahkan lebih banyak baris secara dinamis. Anda tidak benar-benar membutuhkan fungsi itu untuk pertanyaan ini tetapi pada dasarnya saya mendapatkan id tersebut seperti itu:

get_suboption_row($(this).parent().parent().parent().parent().parent().parent().parent().attr('id'), $(this).parent().parent().parent().parent().attr('id'));

terima kasih

jsFiddle:

klik tambahkan yang lain untuk memicu peristiwa

30 2012-07-19T20:23:16+00:00 3
 Rooster
Rooster
Pertanyaan edit 19 Maret 2015 в 10:20
Pemrograman
jquery
Solution / Answer
Roko  C. Buljan
Roko C. Buljan
19 Juli 2012 в 8:25
2012-07-19T20:25:16+00:00
Lebih
Sumber
Sunting
#16736045

Anda memiliki 2 tabel bersarang, untuk mendapatkan apa yang Anda inginkan, Anda dapat menggunakan dua metode penjelajahan DOM ini .closest() atau .parents()

  • .closest() Menelusuri pohon DOM sampai menemukan kecocokan untuk selektor yang diberikan
  • .parents() Menelusuri pohon DOM ke elemen root dokumen, menambahkan setiap elemen leluhur ke koleksi sementara; kemudian menyaring koleksi tersebut berdasarkan selektor jika ada yang disediakan

Menggunakan tabel bersarang:

$(this).closest('table').closest('tbody').attr('id');

< <!

$(this).parents('table').parents('tbody').attr('id');

jsFiddle demo

Roko  C. Buljan
Roko C. Buljan
Jawaban edit 23 Oktober 2018 в 8:00
47
0
 Andy
Andy
19 Juli 2012 в 8:25
2012-07-19T20:25:14+00:00
Lebih
Sumber
Sunting
#16736044

Saya pikir .closest() adalah apa yang Anda cari :)

 Neuron
Neuron
Jawaban edit 23 April 2018 в 2:43
6
0
 Shyju
Shyju
19 Juli 2012 в 8:25
2012-07-19T20:25:48+00:00
Lebih
Sumber
Sunting
#16736046

Jika Anda mengetahui Nama Kelas CSS untuk elemen itu, Anda bisa memanggil metode closest()

var thatParent=  $("#someId").closest(".somCSSClassName")

Jadi kode Anda dapat ditulis ulang sebagai

get_suboption_row($(this).closest("someClass").attr('id'),
                $(this).closest("someOtherClass").attr('id'));

EDIT : Setelah melihat JSfiddle Anda

Gunakan nama kelas untuk mendapatkan Tabel Induk.

 alert($(this).closest('tbody').closest('.table-bordered').attr('id'));

Contoh kerja :

 Shyju
Shyju
Jawaban edit 19 Juli 2012 в 8:44
3
0
Related communities 1
jQuery Indonesia
jQuery Indonesia
374 pengguna
Learning jQuery & Solve Problem
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
工藤 芳則
Terdaftar 6 hari yang lalu
2
Ирина Беляева
Terdaftar 1 minggu yang lalu
3
Darya Arsenyeva
Terdaftar 1 minggu yang lalu
4
anyta nuam-nuam (LapuSiK)
Terdaftar 1 minggu yang lalu
5
Shuhratjon Imomkulov
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi