Pertanyaan Apakah ada fungsi "ada" untuk jQuery?


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 sebuah plugin atau fungsi?


2322
2017-08-27 19:49


asal


Jawaban:


Dalam JavaScript, semuanya 'benar' atau 'falsy', dan untuk angka 0 (dan NaN) berarti false, yang lainnya true. Jadi Anda bisa menulis:

if ($(selector).length)

Anda tidak membutuhkan itu >0 bagian.


2062
2018-02-25 19:16



Iya nih!

jQuery.fn.exists = function(){ return this.length > 0; }

if ($(selector).exists()) {
    // Do something
}

Ini sebagai tanggapan atas: Gembalakan podcast Kode dengan Jeff Atwood


1247
2017-08-27 19:50



Jika kamu digunakan

jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }

Anda akan menyiratkan bahwa chaining itu mungkin ketika tidak.

Ini akan lebih baik:

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }

Kalau tidak, dari FAQ:

if ( $('#myDiv').length ) { /* Do something */ }

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.

if ( $('#myDiv')[0] ) { /* Do something */ }

323
2018-01-14 19:46



Anda dapat menggunakan ini:

// if element exists
if($('selector').length){ /* do something */ }

// if element does not exist
if(!$('selector').length){ /* do something */ }

98
2018-04-03 12:17



Cara menjelaskan diri tercepat dan semantik untuk memeriksa keberadaan sebenarnya dengan menggunakan JavaScript polos:

if (document.getElementById('element_id')) {
    // Do something
}

Ini sedikit lebih panjang untuk menulis daripada alternatif panjang jQuery, tetapi mengeksekusi lebih cepat karena merupakan metode JS asli.

Dan itu lebih baik daripada alternatif menulis fungsi jQuery Anda sendiri. Alternatif itu lebih lambat, karena alasan @snover menyatakan. Tetapi itu juga akan memberikan kesan kepada programmer lain bahwa fungsi yang ada () adalah sesuatu yang melekat pada jQuery. JavaScript akan / harus dipahami oleh orang lain yang mengedit kode Anda, tanpa meningkatkan hutang pengetahuan.

NB: Perhatikan kurangnya '#' sebelum element_id (karena ini adalah JS biasa, bukan jQuery).


73
2018-01-11 12:27



Anda dapat menyimpan beberapa byte dengan menulis:

if ($(selector)[0]) { ... }

Ini berfungsi karena setiap objek jQuery juga menyamar sebagai larik, jadi kita bisa menggunakan operator array dereferencing untuk mendapatkan item pertama dari larik. Ia kembali undefined jika tidak ada item pada indeks yang ditentukan.


53
2018-01-18 09:04



Kamu dapat memakai:

if ($(selector).is('*')) {
  // Do something
}

SEBUAH sedikit lebih elegan, mungkin.


50
2017-09-17 17:53