Bagaimana saya bisa memeriksa keberadaan elemen di jQuery?
Kode saat ini yang saya miliki adalah ini:
if ($(selector).length > 0) {
// Do something
}
Apakah ada cara yang lebih elegan untuk mendekati ini? Mungkin plugin atau fungsi?
javascript
jquery
Jake McGraw
sumber
sumber
NaN != false
.[] + []
=""
... ahh Saya suka javascript[].toString() === [].join(',') === ""
dan"" === ""
.typeof NaN == 'number'
Iya!
Ini sebagai tanggapan terhadap: Herding Code podcast dengan Jeff Atwood
sumber
$.fn.exists
Contoh Anda mengganti pencarian properti (murah!) Dengan dua pemanggilan fungsi, yang jauh lebih mahal — dan salah satu pemanggilan fungsi menciptakan kembali objek jQuery yang sudah Anda miliki, yang konyol..exists
reads cleanly, sedangkan.length
membaca sebagai sesuatu yang semantik berbeda, bahkan jika semantik bertepatan dengan hasil yang identik.Jika Anda menggunakan
Anda akan menyiratkan bahwa rantai itu mungkin terjadi saat tidak.
Ini akan lebih baik:
Atau, dari FAQ :
Anda juga bisa menggunakan yang berikut ini. Jika tidak ada nilai dalam array objek jQuery maka mendapatkan item pertama dalam array akan kembali tidak terdefinisi.
sumber
$(".missing").css("color", "red")
sudah melakukan hal yang benar ... (yaitu tidak ada)$.fn
metode jQuery yang mengembalikan sesuatu selain objek jQuery baru dan karenanya tidak berantai.Anda bisa menggunakan ini:
sumber
Cara menjelaskan diri sendiri tercepat dan paling semantik untuk memeriksa keberadaan sebenarnya dengan menggunakan polos
JavaScript
:Ini sedikit lebih lama untuk menulis daripada alternatif panjang jQuery, tetapi dieksekusi lebih cepat karena ini adalah metode JS asli.
Dan itu lebih baik daripada alternatif menulis
jQuery
fungsi Anda sendiri . Alternatif itu lebih lambat, karena alasan @snover dinyatakan. Tetapi itu juga akan memberi programmer lain kesan bahwaexists()
fungsi adalah sesuatu yang melekat pada jQuery.JavaScript
akan / harus dipahami oleh orang lain yang mengedit kode Anda, tanpa menambah hutang pengetahuan.NB: Perhatikan kurangnya '#' sebelum
element_id
(karena ini adalah JS biasa, bukanjQuery
).sumber
$('#foo a.special')
. Dan itu dapat mengembalikan lebih dari satu elemen.getElementById
tidak bisa mulai mendekati itu.if(document.querySelector("#foo a.special"))
akan bekerja. Tidak perlu jQuery.Anda dapat menyimpan beberapa byte dengan menulis:
Ini berfungsi karena setiap objek jQuery juga menyamar sebagai array, sehingga kita bisa menggunakan operator dereferencing array untuk mendapatkan item pertama dari array . Ini kembali
undefined
jika tidak ada item pada indeks yang ditentukan.sumber
jQuery.first()
ataujQuery.eq(0)
keduanya mengembalikan objek, objek adalah kebenaran meskipun kosong. Contoh ini harus menggambarkan mengapa fungsi-fungsi ini tidak dapat digunakan apa adanya:if(jQuery("#does-not-exist").eq(0)) alert("#does-not-exist exists")
.eq(0)
mengembalikan hanya objek jQuery lain yang terpotong dengan panjang 1 atau 0..first()
hanya metode kenyamanan untuk.eq(0)
. Tetapi.get(0)
mengembalikan elemen DOM pertama atauundefined
dan sama dengan[0]
. Elemen DOM pertama dalam objek jQuery disimpan di properti objek biasa dengan nama'0'
. Itu akses properti yang sederhana. Satu-satunya tipe casting berasal dari konversi implisit dari angka0
ke string'0'
. Jadi jika tipe casting adalah masalah, Anda bisa menggunakannya$.find(selector)['0']
.Kamu bisa menggunakan:
Sebuah sedikit lebih elegan, mungkin.
sumber
666
mungkin memiliki banyak alasan lain mengapa kode mereka rusak. Meskipun merupakan pemilih yang tidak valid, $ (666). Panjangnya adalah javascript yang valid : Mengevaluasi kebenaran, dan karenanya harus memenuhi ketentuan tersebut.$.find(666).length
berfungsi.Plugin ini dapat digunakan dalam
if
pernyataan sukaif ($(ele).exist()) { /* DO WORK */ }
atau menggunakan panggilan balik.Plugin
jsFiddle
Anda dapat menentukan satu atau dua panggilan balik. Yang pertama akan menyala jika elemen ada, yang kedua akan menyala jika elemen tidak ada. Namun, jika Anda memilih untuk hanya melewati satu fungsi, itu hanya akan menyala ketika elemen ada. Dengan demikian, rantai akan mati jika elemen yang dipilih tidak ada. Tentu saja, jika memang ada, fungsi pertama akan menyala dan rantai akan berlanjut.
Perlu diingat bahwa menggunakan varian callback membantu menjaga chainability - elemen dikembalikan dan Anda dapat melanjutkan perintah chaining seperti dengan metode jQuery lainnya!
Contoh Penggunaan
sumber
Has Items
panggilan balik benar-benar lulus dalam objek sebagai argumen?Saya melihat sebagian besar jawaban di sini tidak akurat sebagaimana mestinya, mereka memeriksa panjang elemen, bisa OK dalam banyak kasus, tetapi tidak 100% , bayangkan jika angka lewat ke fungsi sebagai gantinya, jadi saya prototipe fungsi yang memeriksa semua syarat dan kembalikan jawabannya sebagaimana mestinya:
Ini akan memeriksa panjang dan jenisnya, Sekarang Anda dapat memeriksanya dengan cara ini:
sumber
Tidak perlu untuk jQuery kok. Dengan JavaScript biasa, lebih mudah dan benar secara semantik untuk memeriksa:
Jika karena alasan apa pun Anda tidak ingin memasukkan id ke elemen, Anda masih dapat menggunakan metode JavaScript lain yang dirancang untuk mengakses DOM.
jQuery benar-benar keren, tapi jangan biarkan JavaScript murni terlupakan ...
sumber
:has()
?Anda bisa menggunakan ini:
sumber
Alasan semua jawaban sebelumnya memerlukan
.length
parameter adalah bahwa mereka sebagian besar menggunakan$()
pemilih jquery yang memiliki querySelectorAll di belakang tirai (atau mereka menggunakannya secara langsung). Metode ini agak lambat karena perlu mengurai seluruh pohon DOM mencari semua kecocokan dengan pemilih itu dan mengisi array dengan mereka.Parameter ['length'] tidak diperlukan atau berguna dan kodenya akan jauh lebih cepat jika Anda langsung menggunakannya
document.querySelector(selector)
, karena mengembalikan elemen pertama yang cocok atau nol jika tidak ditemukan.Namun metode ini membuat kita dengan objek yang sebenarnya dikembalikan; yang baik-baik saja jika itu tidak akan disimpan sebagai variabel dan digunakan berulang kali (sehingga menjaga referensi sekitar jika kita lupa).
Dalam beberapa kasus ini mungkin diinginkan. Ini dapat digunakan dalam for for loop seperti ini:
Jika Anda tidak benar-benar membutuhkan elemen dan ingin mendapatkan / menyimpan hanya benar / salah, cukup gandakan bukan !! Ini berfungsi untuk sepatu yang terlepas, jadi mengapa simpul di sini?
sumber
Apa
$.contains()
yang kamu inginkan?sumber
Saya merasa
if ($(selector).length) {}
tidak cukup. Ini akan merusak aplikasi Anda secara diam-diam ketikaselector
benda kosong{}
.Satu-satunya saran saya adalah melakukan pemeriksaan tambahan untuk
{}
.Saya masih mencari solusi yang lebih baik karena ini agak berat.
Edit: PERINGATAN! Ini tidak berfungsi di IE kapan
selector
string.sumber
$()
dengan objek kosong sebagai argumen?{}
ke$()
?Anda dapat memeriksa elemen ada atau tidak menggunakan panjang dalam skrip java. Jika panjang lebih besar dari nol maka elemen hadir jika panjangnya nol maka elemen tidak ada
sumber
Memeriksa keberadaan elemen didokumentasikan dengan rapi di situs web jQuery resmi itu sendiri!
sumber
ini sangat mirip dengan semua jawaban, tetapi mengapa tidak menggunakan
!
operator dua kali sehingga Anda bisa mendapatkan boolean:sumber
Boolean(x)
dapat kadang-kadang menjadi lebih efisien.sumber
if
manaif
akan meningkatkan keterbacaan dengan biaya 2 byte.&&
untuk Anda.Coba uji untuk
DOM
elemensumber
Terinspirasi oleh jawaban hiway, saya datang dengan yang berikut:
jQuery.contains mengambil dua elemen DOM dan memeriksa apakah yang pertama berisi yang kedua.
Menggunakan
document.documentElement
sebagai argumen pertama memenuhi semantikexists
metode ketika kita ingin menerapkannya semata-mata untuk memeriksa keberadaan elemen dalam dokumen saat ini.Di bawah, saya telah mengumpulkan cuplikan yang membandingkan
jQuery.exists()
terhadap$(sel)[0]
dan$(sel).length
pendekatan yang keduanya mengembalikantruthy
nilai untuk$(4)
sementara$(4).exists()
kembalifalse
. Dalam konteks memeriksa keberadaan elemen dalam DOM ini tampaknya merupakan hasil yang diinginkan .Tampilkan cuplikan kode
sumber
Tidak perlu jQuery (solusi dasar)
Opsi yang jauh lebih banyak performan di bawah ini (perhatikan kurangnya titik sebelum kelas).
querySelector menggunakan mesin pencocokan yang tepat seperti $ () (mendesis) di jQuery dan menggunakan lebih banyak daya komputasi tetapi dalam 99% kasus akan baik-baik saja. Opsi kedua lebih eksplisit dan memberi tahu kode apa yang harus dilakukan. Ini jauh lebih cepat menurut jsperf https://jsperf.com/getelementsbyclassname-vs-queryselectorall/25
sumber
Saya hanya ingin menggunakan javascript vanilla polos untuk melakukan ini.
sumber
Saya menemukan pertanyaan ini dan saya ingin membagikan potongan kode yang saat ini saya gunakan:
Dan sekarang saya dapat menulis kode seperti ini -
Ini mungkin tampak banyak kode, tetapi ketika ditulis dalam CoffeeScript itu cukup kecil:
sumber
Saya punya kasus di mana saya ingin melihat apakah ada objek di dalam yang lain jadi saya menambahkan sesuatu ke jawaban pertama untuk memeriksa pemilih di dalam pemilih ..
sumber
Bagaimana tentang:
Ini sangat minim dan menghemat Anda harus melampirkan pemilih dengan
$()
setiap kali.sumber
if($("#thing").exists(){}
berbunyi. Juga, ini bukan cara jQuery.Saya menggunakan ini:
Jalankan rantai hanya jika elemen jQuery ada - http://jsfiddle.net/andres_314/vbNM3/2/
sumber
Ini adalah
exist
metode favorit saya di jQuerydan versi lain yang mendukung panggilan balik ketika pemilih tidak ada
Contoh:
sumber
$("selector"
) mengembalikan objek yang memilikilength
properti. Jika pemilih menemukan elemen, mereka akan dimasukkan dalam objek. Jadi, jika Anda memeriksa panjangnya, Anda dapat melihat apakah ada elemen. Dalam JavaScript0 == false
, jadi jika Anda tidak mendapatkan0
kode Anda akan berjalan.sumber
Berikut ini adalah contoh lengkap dari berbagai situasi dan cara untuk memeriksa apakah elemen menggunakan direct if jika pada jQuery selector mungkin atau mungkin tidak berfungsi karena ia mengembalikan array atau elemen.
SOLUSI AKHIR
sumber
Anda tidak perlu memeriksa apakah lebih besar dari
0
suka$(selector).length > 0
,$(selector).length
itu cukup dan cara yang elegan untuk memeriksa keberadaan elemen. Saya tidak berpikir itu layak untuk menulis fungsi hanya untuk ini, jika Anda ingin melakukan lebih banyak hal tambahan, ya.sumber