"Hepsi hariç" jQuery seçici


91

Bir HTML biçimlendirmesindeki tüm div'leri (jQuery kullanarak) şu şekilde seçebilirim:

$('div')

Ancak , yukarıdaki seçimden belirli bir div(sahip olmayı id="myid") dışlamak istiyorum .

Bunu Jquery işlevlerini kullanarak nasıl yapabilirim?


Yanıtlar:


172

Basit:

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

Kullanılması .not(), kendisine verilen seçiciyle eşleşen öğeleri, tarafından döndürülen kümeden kaldırır $('div').

:not()Seçiciyi de kullanabilirsiniz :

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

Her iki seçici de aynı şeyi yapar, ancak :not()daha hızlıdır , çünkü muhtemelen jQuery'nin seçici motoru Sizzle onu yerel bir .querySelectorAll()çağrıya optimize edebilir.


1
@Raynos Ben mutlaka sanmıyorum kötü ama kullanan .not()bir çok, çok daha iyi :not().
Bojangles

1
Bence olmalı $('div:not(#myid)');(tırnak işaretleri olmadan). @Raynos: Neden? :not()bir CSS3 seçicidir. jQuery, querySelectorAlldestekleniyorsa seçiciyi doğrudan aktarabilir ...
Felix Kling

@FelixKling, selektörlerin bir parçası olarak sorun değil4 . Ancak jQuery'de daha yavaş .notve daha az okunabilir. ":
JQuery'de

@Raynos: Hiçbir Seçici özelliği içinde alıntı yapılmasına izin vermedi :not(). Bu seçici, Seçiciler 4 için yeni değildir ve tekliflere izin verecek şekilde değiştirilmemiştir. Yine de daha karmaşık seçicilere izin verecek şekilde değiştirildi.
Yorumunuzu

1
@PeterKrauss En hızlısı işaretleyen bir jsPerf testi yaptım querySelectorAll. Gerçek bir dünya ölçütü değil, ancak jQuery'nin dahili ek yükü olmadığı için beklenmelidir. :not()aslında daha hızlı, muhtemelen çünkü Sizzle onu kullanmak için optimize edebileceğini biliyorquerySelectorAll()
Bojangles

9
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);

Bunu eski moda şekilde yapabilirsin. Bu kadar basit bir şey için jQuery'ye gerek yok.

Profesyonel ipuçları:

Bir dizi dom öğesi yalnızca bir dizidir, bu nedenle toArraybir NodeList.

Bir kümeye eleman eklemek sadece

set.push.apply(set, arrOfElements);

Bir kümeden bir öğeyi kaldırmak

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

Birden fazla öğeyi aynı anda kolayca kaldıramazsınız :(


1
Yerli Javascript günümüzde (2017) belki de kullanımda .querySelector()veya .querySelectorAll()birlikte div:not(#myid) hızlıdır ... Öyle mi?
Peter Krauss


4
   var elements =  $('div').not('#myid');

Bu, 'myid' kimliğine sahip olan hariç tüm div'leri içerecektir




3

.notJQuery kitaplığının özelliğini kullanırsınız :

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

Burada iş başında görün . Div #myDiv beyaz olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.