Mogę wybrać (używając jQuery) wszystkie elementy div w znaczniku HTML w następujący sposób:
$('div')
Ale chcę wykluczyć konkretny div
(powiedzmy mający id="myid"
) z powyższego wyboru.
Jak mogę to zrobić za pomocą funkcji JQuery?
Odpowiedzi:
Prosty:
$('div').not('#myid');
Użycie .not()
spowoduje usunięcie elementów dopasowanych przez nadany mu selektor ze zbioru zwróconego przez $('div')
.
Możesz także użyć :not()
selektora:
$('div:not(#myid)');
Oba selektory robią to samo, jednak :not()
jest szybsze , prawdopodobnie dlatego, że silnik selektora jQuery, Sizzle, może zoptymalizować go do .querySelectorAll()
wywołania natywnego .
.not()
jest o wiele lepsze niż :not()
.
$('div:not(#myid)');
(bez cudzysłowów). @Raynos: Dlaczego? :not()
to selektor CSS3. jQuery może bezpośrednio przekazać selektor, querySelectorAll
jeśli jest obsługiwany ...
.not
i mniej czytelny. Powinienem był powiedzieć „: nie selektor w jQuery”
:not()
. Również ten selektor nie jest nowy w Selectors 4, ani nie został zmieniony, aby umożliwić cytowanie. Został jednak zmieniony, aby umożliwić bardziej złożone selektory. Chyba że źle zrozumiałem twój komentarz ...
querySelectorAll
jako najszybszy. Nie jest to prawdziwy wzorzec, ale należy się tego spodziewać, biorąc pod uwagę, że nie ma narzutu z wewnętrznego jQuery. :not()
jest w rzeczywistości szybszy, prawdopodobnie dlatego, że Sizzle wie, że może go zoptymalizować pod kątem użyciaquerySelectorAll()
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);
Możesz to po prostu zrobić w staroświecki sposób. Nie ma potrzeby korzystania z jQuery z czymś tak prostym.
Wskazówki dla profesjonalistów:
Zestaw elementów dom to po prostu tablica, więc użyj swojej ulubionej toArray
metody na NodeList
.
Dodanie elementów do zestawu to po prostu
set.push.apply(set, arrOfElements);
Usunięcie elementu z zestawu to
set.splice(set.indexOf(el), 1)
Nie możesz łatwo usunąć wielu elementów naraz :(
.querySelector()
lub .querySelectorAll()
z div:not(#myid)
jest szybsze ... Czy tak?
$("div:not(#myid)")
lub
$("div").not("#myid")
to główne sposoby wyboru wszystkich identyfikatorów oprócz jednego
Możesz zobaczyć demo tutaj
$("div:not(#myid)")
jest szybsze ... Sprawdź optymalizację sizzlejs , korzystając z natywnego JavaScript .querySelector()
lub .querySelectorAll()
.
Że należy to zrobić:
$('div:not("#myid")')