Posso selezionare (usando jQuery) tutti i div in un markup HTML come segue:
$('div')
Ma voglio escludere un particolare div
(diciamo avere id="myid"
) dalla selezione di cui sopra.
Come posso farlo utilizzando le funzioni Jquery?
Risposte:
Semplice:
$('div').not('#myid');
L'uso .not()
rimuoverà gli elementi corrispondenti al selettore assegnatogli dal set restituito da $('div')
.
Puoi anche usare il file :not()
selettore:
$('div:not(#myid)');
Entrambi i selettori fanno la stessa cosa, tuttavia :not()
è più veloce , presumibilmente perché il motore di selezione di jQuery Sizzle può ottimizzarlo in una .querySelectorAll()
chiamata nativa .
.not()
è molto, molto meglio di :not()
.
$('div:not(#myid)');
(senza virgolette). @ Raynos: perché? :not()
è un selettore CSS3. jQuery può passare direttamente il selettore a querySelectorAll
se supportato ...
.not
e meno leggibile. Avrei dovuto dire ": non selettore in jQuery"
:not()
. Né questo selettore è nuovo per Selectors 4, né è stato modificato per consentire le virgolette. Tuttavia, è stato modificato per consentire selettori più complessi. A meno che non abbia frainteso il tuo commento ...
querySelectorAll
come il più veloce. Non è un benchmark del mondo reale, ma c'è da aspettarselo visto che non c'è overhead dall'interno di jQuery. :not()
è infatti più veloce, presumibilmente perché Sizzle sa di poterlo ottimizzare per l'usoquerySelectorAll()
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);
Potresti farlo alla vecchia maniera. Non c'è bisogno di jQuery con qualcosa di così semplice.
Suggerimenti per professionisti:
Un insieme di elementi dom è solo un array, quindi usa il tuo toArray
metodo preferito su un fileNodeList
.
Aggiungere elementi a un set è solo
set.push.apply(set, arrOfElements);
Rimuovere un elemento da un insieme è
set.splice(set.indexOf(el), 1)
Non puoi rimuovere facilmente più elementi contemporaneamente :(
.querySelector()
o .querySelectorAll()
con div:not(#myid)
è più veloce ... vero?
$("div:not(#myid)")
è più veloce ... Controlla l' ottimizzazione di sizzlejs per questo, quando usi Javascript nativo .querySelector()
o .querySelectorAll()
.
Dovrebbe farlo:
$('div:not("#myid")')