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, querySelectorAlldestekleniyorsa seçiciyi doğrudan aktarabilir ...
.notve 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 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 :(
.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")')