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 querySelectorAllse supportato ...
.note 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 ...
querySelectorAllcome 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 toArraymetodo 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")')