Apakah ada fungsi yang mirip dengan jQuery
.closest()
tetapi untuk melintasi turunan dan hanya mengembalikan yang terdekat?
Saya tahu bahwa ada .find()
fungsi, tetapi mengembalikan semua kemungkinan kecocokan, bukan yang terdekat.
Edit:
Berikut definisi terdekat (setidaknya bagi saya) :
Pertama-tama, semua anak dilintasi, kemudian setiap individu anak-anak dilintasi.
Dalam contoh yang diberikan di bawah id='2'
ini adalah .closest
keturunan terdekat dariid="find-my-closest-descendant"
<div id="find-my-closest-descendant">
<div>
<div class="closest" Id='1'></div>
</div>
<div class="closest" Id='2'></div>
</div>
Silakan lihat tautan JSfiddle .
.find("filter here").eq(0)
?:first
filter?Jawaban:
Menurut definisi Anda
closest
, saya telah menulis plugin berikut:sumber
.closest()
fungsi jQuery , ini cocok dengan elemen yang dipanggilnya juga. Lihat jsfiddle saya . Dengan mengubahnya menjadi$currentSet = this.children(); // Current place
itu akan dimulai dengan itu anak-anak bukan jsfiddleJika yang dimaksud dengan keturunan "terdekat" yang Anda maksud adalah anak pertama maka Anda dapat melakukan:
Atau:
Atau, untuk mencari kemunculan pertama elemen tertentu, Anda bisa melakukan:
Atau:
Sungguh, kita membutuhkan definisi yang kuat tentang apa artinya "keturunan terdekat".
Misalnya
Yang mana yang
<span>
akan$('#foo').closestDescendent('span')
kembali?sumber
$('#foo').find('.whatever').first();
itu "breadth-first" atau "depth-first"Anda dapat menggunakan
find
dengan:first
selektor:Baris di atas akan menemukan
<p>
elemen pertama pada turunan#parent
.sumber
find('whatever:first')
.Bagaimana dengan pendekatan ini?
Pemilih "anak langsung" ini bekerja untuk saya.
sumber
Solusi JS murni (menggunakan ES6).
Contoh
Mempertimbangkan struktur berikut:
Tampilkan cuplikan kode
sumber
while
Ekspresi memiliki efek samping. 2) Penggunaan tanda.matches
centang pada dua baris, bukan hanya satu.Jika seseorang mencari solusi JS murni (menggunakan ES6, bukan jQuery), inilah yang saya gunakan:
sumber
matches
dua kali juga cukup mengganggu saya). +1 untuk Anda :)Saya pikir pertama-tama Anda harus mendefinisikan apa artinya "paling dekat". Jika yang Anda maksud adalah node turunan yang cocok dengan kriteria Anda yang merupakan jarak terpendek dalam istilah tautan orang tua, maka menggunakan ": first" atau ".eq (0)" tidak selalu berfungsi:
Dalam contoh itu,
<span>
elemen ".target" kedua adalah "lebih dekat" ke "awal"<div>
, karena hanya berjarak satu lompatan orang tua. Jika itu yang Anda maksud dengan "terdekat", Anda perlu mencari jarak minimum dalam fungsi filter. Daftar hasil dari pemilih jQuery selalu dalam urutan DOM.Mungkin:
Itu semacam plugin hack karena cara membangun objek hasil, tetapi idenya adalah Anda harus menemukan jalur parental terpendek dari semua elemen yang cocok yang Anda temukan. Kode ini bias ke arah elemen ke kiri di pohon DOM karena
<
pemeriksaan;<=
akan bias ke kanan.sumber
Saya memasak ini, belum ada implementasi untuk pemilih posisi (mereka membutuhkan lebih dari sekadar
matchesSelector
):Demo: http://jsfiddle.net/TL4Bq/3/
Mungkin ada beberapa bug, tidak terlalu banyak mengujinya.
sumber
Jawaban Rob W tidak cukup berhasil untuk saya. Saya menyesuaikannya dengan ini yang berhasil.
sumber
.find(filter).first()
, hanya lebih lambat;)Saya akan menggunakan yang berikut ini untuk menyertakan target itu sendiri jika cocok dengan selektor:
Markup:
sumber
Meskipun ini adalah topik lama, saya tidak bisa menahan diri untuk menerapkan anak-anak terdekat saya. Menghadirkan keturunan pertama yang ditemukan dengan perjalanan paling sedikit (nafas lebih dulu). Salah satunya adalah rekursif (favorit pribadi), yang lain menggunakan daftar yang harus dilakukan sehingga tanpa rekursi sebagai ekstensi jQquery.
Semoga seseorang mendapat manfaat.
Catatan: Rekursif mendapat stack overflow, dan saya meningkatkan yang lain, sekarang simular dengan jawaban sebelumnya yang diberikan.
sumber
Plugin berikut mengembalikan keturunan terdekat ke-n.
sumber
Saya sedang mencari solusi serupa (saya ingin semua keturunan terdekat, yaitu luasnya pertama + semua kecocokan terlepas dari level mana itu ada), inilah yang akhirnya saya lakukan:
Saya harap ini membantu.
sumber
Sederhananya,
sumber
Ada artikel bagus yang menunjukkan bahwa apa yang dibutuhkan OP dapat dicapai dengan mudah dengan [Geeks for Geeks] terdekat
1 https://www.geeksforgeeks.org/jquery-closest-with-examples/
sumber
Anda memiliki banyak pilihan, bagaimanapun
$("#parent").children(".child");
juga fastet. lihat artikel ini untuk detail dan patokansumber