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:
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.
.not()
bir çok, çok daha iyi :not()
.
$('div:not(#myid)');
(tırnak işaretleri olmadan). @Raynos: Neden? :not()
bir CSS3 seçicidir. jQuery, querySelectorAll
destekleniyorsa seçiciyi doğrudan aktarabilir ...
.not
ve daha az okunabilir. ":
: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.
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()
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 toArray
bir 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 :(
.querySelector()
veya .querySelectorAll()
birlikte div:not(#myid)
hızlıdır ... Öyle mi?
$("div:not(#myid)")
veya
$("div").not("#myid")
biri dışında tümünü seçmenin ana yollarıdır
Demoyu burada görebilirsiniz
$("div:not(#myid)")
daha hızlıdır ... Yerel Javascript veya .dk kullanırken sizzlejs optimizasyonunu kontrol edin . .querySelector()
.querySelectorAll()
Bunu yapmalı:
$('div:not("#myid")')