Pemilih jQuery “Semua kecuali tidak”

89

Saya dapat memilih (menggunakan jQuery) semua div dalam markup HTML sebagai berikut:

$('div')

Tetapi saya ingin mengecualikan div(katakanlah memiliki id="myid") tertentu dari pilihan di atas.

Bagaimana saya bisa melakukan ini menggunakan fungsi Jquery?

siva636
sumber
2
gunakan pemilih bukan di jquery
abhijit

Jawaban:

171

Sederhana:

$('div').not('#myid');

Menggunakan .not()akan menghapus elemen yang cocok dengan selektor yang diberikan padanya dari set yang dikembalikan oleh $('div').

Anda juga dapat menggunakan :not()selektor:

$('div:not(#myid)');

Kedua penyeleksi melakukan hal yang sama, namun :not()lebih cepat , mungkin karena mesin pemilih jQuery Sizzle dapat mengoptimalkannya menjadi .querySelectorAll()panggilan asli .

Bojangles
sumber
1
@Raynos Saya tidak berpikir itu selalu buruk , tetapi menggunakan .not()adalah jauh, jauh lebih baik dari :not().
Bojangles
1
Saya pikir itu harus $('div:not(#myid)');(tanpa tanda kutip). @Raynos: Mengapa? :not()adalah pemilih CSS3. jQuery dapat langsung meneruskan pemilih ke querySelectorAlljika didukung ...
Felix Kling
@FelixKling tidak apa-apa sebagai bagian dari penyeleksi4 . Namun di jQuery lebih lambat .notdan kurang dapat dibaca. Saya seharusnya mengatakan ": bukan selector di jQuery"
Raynos
@Raynos: Tidak ada spesifikasi Penyeleksi yang pernah mengizinkan kutipan di dalamnya :not(). Pemilih ini juga bukan baru untuk Selectors 4, juga tidak ada yang diubah untuk mengizinkan tanda kutip. Ini telah diubah untuk memungkinkan penyeleksi yang lebih kompleks. Kecuali jika saya salah memahami komentar Anda ...
BoltClock
1
@PeterKrauss Saya baru saja melakukan benchmark jsPerf yang menandai querySelectorAllsebagai yang tercepat. Bukan patokan dunia nyata, tetapi diharapkan karena tidak ada overhead dari internal jQuery. :not()sebenarnya lebih cepat, mungkin karena Sizzle tahu ia dapat mengoptimalkannya untuk digunakanquerySelectorAll()
Bojangles
9
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);

Anda bisa melakukannya dengan cara kuno. Tidak perlu jQuery dengan sesuatu yang begitu sederhana.

Kiat pro:

Satu set elemen dom hanyalah sebuah larik, jadi gunakan toArraymetode favorit Anda pada file NodeList.

Menambahkan elemen ke satu set itu adil

set.push.apply(set, arrOfElements);

Menghapus elemen dari satu set adalah

set.splice(set.indexOf(el), 1)

Anda tidak dapat dengan mudah menghapus beberapa elemen sekaligus :(

Raynos
sumber
1
Saat ini (2017) mungkin penggunaan native Javascript .querySelector()atau .querySelectorAll()with div:not(#myid) lebih cepat ... Benarkah?
Peter Krauss
8
$("div:not(#myid)")

[dokter]

atau

$("div").not("#myid")

[dokter]

adalah cara utama untuk memilih semua kecuali satu id

Anda bisa melihat demo di sini

asal
sumber
Hari ini (2017) mungkin $("div:not(#myid)") lebih cepat ... Periksa pengoptimalan sizzlejs untuk itu, saat menggunakan Javascript asli .querySelector()atau .querySelectorAll().
Peter Krauss
4
   var elements =  $('div').not('#myid');

Ini akan mencakup semua div kecuali yang dengan id 'myid'

Ehtesham
sumber
3
$('div:not(#myid)');

inilah yang Anda butuhkan, saya pikir.

abhijit
sumber
3

Itu harus melakukannya:

$('div:not("#myid")')
iappwebdev
sumber
3

Anda menggunakan .notproperti pustaka jQuery:

$('div').not('#myDiv').css('background-color', '#000000');

Lihat aksinya di sini . Div #myDiv akan berwarna putih.

Kyle
sumber