Pernahkah Anda mengalami masalah dalam menemukan induk dari simpul DOM di JavaScript, tetapi tidak yakin berapa banyak level yang harus Anda lewati untuk mencapainya? Show
Itu cukup mudah, bukan? _Dalam hal ini, Node. parentNode API sudah cukup. Apa yang dilakukannya adalah mengembalikan simpul induk dari elemen yang diberikan. Dalam contoh di atas, _9adalah tombol yang diklik; Tapi bagaimana jika struktur HTML bersarang lebih dalam dari itu? _Pekerjaan kami menjadi jauh lebih sulit dengan menambahkan beberapa elemen HTML lagi. Tentu, kita bisa melakukan sesuatu seperti _0, tapi ayolah… itu tidak elegan, dapat digunakan kembali, atau dapat diskalakanCara lama. Menggunakan <div data-id="123"> <article> <header> <h1>Some title</h1> <button>Click me</button> </header> <!-- .. --> </article> </div>_1-loopSalah satu solusinya adalah dengan menggunakan 1 loop yang berjalan hingga simpul induk ditemukan _Menggunakan contoh HTML yang sama dari atas lagi, akan terlihat seperti ini _Solusi ini jauh dari sempurna. Bayangkan jika Anda ingin menggunakan ID atau kelas atau jenis pemilih lainnya, alih-alih nama tag. Setidaknya itu memungkinkan sejumlah variabel simpul anak antara induk dan sumber kami Ada juga jQueryKembali pada hari itu, jika Anda tidak ingin berurusan dengan menulis jenis fungsi yang kami lakukan di atas untuk setiap aplikasi (dan mari kita menjadi nyata, siapa yang mau?), maka perpustakaan seperti jQuery berguna (dan masih . Ini menawarkan metode _3 untuk hal itu
Cara baru. Menggunakan <div data-id="123"> <article> <header> <h1>Some title</h1> <button>Click me</button> </header> <!-- .. --> </article> </div>_4Meskipun jQuery masih merupakan pendekatan yang valid (hei, sebagian dari kita terikat padanya), menambahkannya ke proyek hanya untuk metode yang satu ini adalah berlebihan, terutama jika Anda dapat melakukan hal yang sama dengan JavaScript asli Dan di situlah _5 beraksi
Di sana kita pergi. Begitulah mudahnya, dan tanpa pustaka atau kode tambahan apa pun _4 memungkinkan kita melintasi DOM sampai kita mendapatkan elemen yang cocok dengan pemilih yang diberikan. Kehebatannya adalah kami dapat melewati pemilih mana pun yang juga akan kami berikan kepada 7 atau 8. Itu bisa berupa ID, kelas, atribut data, tag, atau apa pun
Jika _5 menemukan simpul induk berdasarkan pemilih yang diberikan, ia mengembalikannya dengan cara yang sama seperti 0. Jika tidak, jika tidak menemukan induk, ia mengembalikan 1 sebagai gantinya, membuatnya mudah digunakan dengan kondisi 2
Siap untuk beberapa contoh kehidupan nyata? Gunakan Kasus 1. DropdownCodePen Embed Fallback Demo pertama kami adalah implementasi dasar (dan jauh dari sempurna) dari menu tarik-turun yang terbuka setelah mengeklik salah satu item menu tingkat atas. Perhatikan bagaimana menu tetap terbuka bahkan saat mengklik di mana saja di dalam dropdown atau memilih teks? 5 API adalah yang mendeteksi klik luar itu. Dropdown itu sendiri adalah elemen _4 dengan kelas 5, jadi mengklik di mana saja di luar menu akan menutupnya. Itu karena nilai untuk _6 akan menjadi 1 karena tidak ada simpul induk dengan kelas ini
Di dalam fungsi callback 8, kondisi memutuskan apa yang harus dilakukan. tutup drop down. Jika tempat lain di dalam unordered list diklik, 5 akan menemukan dan mengembalikannya, menyebabkan dropdown tetap terbukaGunakan Kasus 2. TabelCodePen Embed Fallback Contoh kedua ini merender tabel yang menampilkan informasi pengguna, katakanlah sebagai komponen di dasbor. Setiap pengguna memiliki ID, tetapi alih-alih menampilkannya, kami menyimpannya sebagai atribut data untuk setiap elemen 0 _0Kolom terakhir berisi dua tombol untuk mengedit dan menghapus pengguna dari tabel. Tombol pertama memiliki atribut 1 dari 2, dan tombol kedua adalah 3. Saat kami mengklik salah satunya, kami ingin memicu beberapa tindakan (seperti mengirim permintaan ke server), tetapi untuk itu, ID pengguna diperlukanPendengar peristiwa klik dilampirkan ke objek jendela global, jadi setiap kali pengguna mengklik di suatu tempat di halaman, fungsi panggilan balik 8 dipanggil _1Jika klik terjadi di tempat lain selain salah satu tombol ini, tidak ada atribut 1, maka tidak ada yang terjadi. Namun, saat mengklik salah satu tombol, tindakan akan ditentukan (omong-omong, itu disebut delegasi acara), dan sebagai langkah berikutnya, ID pengguna akan diambil dengan memanggil 6 _2Fungsi ini mengharapkan node DOM sebagai satu-satunya parameter dan, saat dipanggil, menggunakan 5 untuk menemukan baris tabel yang berisi tombol yang ditekan. Ini kemudian mengembalikan nilai _8, yang sekarang dapat digunakan untuk mengirim permintaan ke serverGunakan Kasus 3. Tabel di BereaksiMari kita tetap menggunakan contoh tabel dan lihat bagaimana kita menanganinya pada proyek React. Berikut kode untuk komponen yang mengembalikan tabel _3Saya menemukan bahwa kasus penggunaan ini sering muncul — cukup umum untuk memetakan kumpulan data dan menampilkannya dalam daftar atau tabel, lalu mengizinkan pengguna untuk melakukan sesuatu dengannya. Banyak orang menggunakan fungsi panah sebaris, seperti itu _4Meskipun ini juga cara yang valid untuk menyelesaikan masalah, saya lebih suka menggunakan teknik 8. Salah satu kelemahan dari fungsi panah inline adalah bahwa setiap kali React merender ulang daftar, ia perlu membuat fungsi panggilan balik lagi, yang mengakibatkan kemungkinan masalah kinerja saat menangani data dalam jumlah besar.Dalam fungsi panggilan balik, kami hanya berurusan dengan acara tersebut dengan mengekstraksi target (tombol) dan mendapatkan elemen induk 0 yang berisi nilai 8 _5Gunakan Kasus 4. ModalCodePen Embed Fallback Contoh terakhir ini adalah komponen lain yang saya yakin pernah Anda temui di beberapa titik. sebuah modal. Modal sering kali menantang untuk diimplementasikan karena harus menyediakan banyak fitur sekaligus dapat diakses dan (idealnya) berpenampilan menarik Kami ingin fokus pada cara menutup modal. Dalam contoh ini, itu mungkin dengan menekan 2 pada keyboard, mengklik tombol di modal, atau mengklik di mana saja di luar modalDalam JavaScript kami, kami ingin mendengarkan klik di suatu tempat di modal _6Modal disembunyikan secara default melalui kelas utilitas ________11______3. Hanya ketika pengguna mengklik tombol merah besar, modal terbuka dengan menghapus kelas ini. Dan begitu modal terbuka, mengklik di mana saja di dalamnya — kecuali tombol tutup — tidak akan menutupnya secara tidak sengaja. Fungsi panggilan balik pendengar acara bertanggung jawab untuk itu _7 _9 adalah simpul DOM yang diklik yang, dalam contoh ini, adalah seluruh tampilan latar belakang modal, 5. Node DOM ini tidak berada dalam 6, karenanya 4 dapat meluapkan semua yang diinginkan dan tidak akan menemukannya. Kondisi memeriksanya dan memicu fungsi ________11______8Mengklik di suatu tempat di dalam nodal, ucapkan judulnya, akan menjadikan 6 sebagai simpul induk. Dalam hal ini, kondisinya tidak benar, meninggalkan modal dalam keadaan terbukaOh, dan tentang dukungan browser…Seperti halnya API JavaScript "baru" yang keren, dukungan browser adalah sesuatu yang perlu dipertimbangkan. Kabar baiknya adalah bahwa _5 bukanlah hal baru dan didukung di semua browser utama selama beberapa waktu, dengan cakupan dukungan sebesar 94%. Saya akan mengatakan ini memenuhi syarat sebagai aman untuk digunakan dalam lingkungan produksiSatu-satunya browser yang tidak menawarkan dukungan apa pun adalah Internet Explorer (semua versi). Jika Anda harus mendukung IE, Anda mungkin lebih baik menggunakan pendekatan jQuery Seperti yang Anda lihat, ada beberapa kasus penggunaan yang cukup solid untuk 5. Pustaka apa, seperti jQuery, yang dibuat relatif mudah bagi kami di masa lalu sekarang dapat digunakan secara native dengan JavaScript vanillaBerkat dukungan browser yang bagus dan API yang mudah digunakan, saya sangat bergantung pada metode kecil ini di banyak aplikasi dan belum pernah kecewa. Bagaimana Anda menggunakan terdekat?Definisi dan Penggunaan
. Metode terdekat () dimulai dari elemen itu sendiri, kemudian leluhur (orang tua, kakek nenek,. ) sampai ditemukan kecocokan. Metode terdekat() mengembalikan null() jika tidak ditemukan kecocokan. The closest() method searches up the DOM tree for elements which matches a specified CSS selector. The closest() method starts at the element itself, then the anchestors (parent, grandparent, ...) until a match is found. The closest() method returns null() if no match is found.
Apa perbedaan antara terdekat dan temukan di JavaScript?Terdekat akan naik di elemen induk untuk menemukan kecocokan dengan pemilih. Find akan turun ke elemen turunan untuk menemukan kecocokan dengan pemilih . Keduanya pertama-tama akan menguji elemen awal sebelum melalui elemen induk/anak.
Bagaimana menemukan kelas terdekat di JavaScript?Pendekatan 1. Gunakan pemilih Javascript untuk memilih elemen. Gunakan metode terdekat() untuk mendapatkan induk terdekat dengan kelas tertentu .
Bagaimana cara memilih elemen terdekat dalam JavaScript?Metode terdekat() dimulai dengan targetElement dan melakukan perjalanan ke pohon DOM hingga menemukan elemen yang cocok dengan pemilih . Metode mengembalikan nol jika tidak ada elemen seperti itu. |