2015-02-25 9 views
5

possiamo usare $('body>div:lt(2)') per ottenere le prime 2 DIV s nel body, se body>div è stato assegnato ad una variabile:Come possiamo applicare lo pseudo-selettore a una variabile DOM jQuery?

var s = $('body>div') 

possiamo ancora utilizzare il selettore pseudo o altri modi per ottenere le prime 2 DIV s in riferimento alla variabile? Certo, s: lt (2) non funzionerà. Quello che posso pensare è $(s.slice(0,2)), ma c'è un modo migliore per farlo?

risposta

5

È possibile utilizzare il metodo .filter() di jQuery, che consente, tra le altre cose, un argomento selettore per filtrare i nodi selezionati in un oggetto jQuery.

var filtered = s.filter(':lt(2)'); 

Si noti che questo non modifica il valore originale di s, in modo da avere tutti i tuoi div s in s, e le tue filtrati div s in filtered.


In alternativa, come hai già detto ed è stato discusso nei commenti, è possibile utilizzare Array.prototype.slice.

var sliced = $(s.slice(0,2)); 

Questo tecnicamente è più veloce di .filter(). Tuttavia, potrebbe anche rendere il tuo codice meno leggibile/comprensibile. È probabile che anche il guadagno di prestazioni sia estremamente trascurabile a meno che non si esegua questa operazione molte migliaia di volte o più in un brevissimo periodo di tempo.

La leggibilità e le prestazioni sono una battaglia combattuta spesso in fase di programmazione e, in definitiva, sei l'unico in grado di decidere quale si vince per il tuo codice.

+0

In termini di prestazioni, l'utilizzo di 'slice()' è migliore dal momento che si sta facendo affidamento sulla funzionalità JS nativa. – AlexL

+0

1+ .. Non vedo perché questo è stato downvoted. Fa esattamente quello che l'OP vuole. Le prestazioni sono probabilmente trascurabili. –

+0

È stato downvoted perché OP vuole un modo migliore. Mentre questa risposta fornisce un modo migliore in termini di leggibilità, questa variante non è la migliore in termini di prestazioni rispetto all'alternativa suggerita dall'OP. – AlexL

Problemi correlati