2009-12-08 20 views
184

con jQuery, ho bisogno di selezionare solo i primi elementi "n" dalla pagina, ad esempio, i primi 20 link invece di selezionare tutti loro con la consuetaSelezione delle prime voci "n" con jQuery

$("a") 

Sembra semplice ma il manuale di jQuery non ha alcuna prova di qualcosa di simile.

risposta

324

probabilmente avrete bisogno di leggere su slice. Il tuo codice sarà simile a questo:

$("a").slice(0,20) 
+56

Anche se l'approccio ': lt (20)' sembra molto più pulito, usare slice è * molto * più efficiente se si ha un grande set di risultati con cui iniziare. Sfortunatamente, quando si valuta ": lt" e altri selettori posizionali, ** jQuery esegue il loop dell'intero set **, anche se sta ottenendo solo il primo elemento. Ho scritto di più su questo sul mio blog qui: http://spadgos.com/?p=51 – nickf

+1

Grazie, un lato della mia richiesta riguardava le prestazioni, quindi questa è la risposta giusta per me. Grazie agli altri per indicare il selettore: lt. – Omiod

+2

Commento informativo di @nickf, ma il link del blog e il collegamento del grafico non sembrano funzionare – Fractalf

74

Uso selettore lt pseudo:

$("a:lt(n)") 

Corrisponde elementi prima ennesimo (la esimo elemento escluso). La numerazione inizia da 0.

+11

[Secondo jQuery Docs] (http://api.jquery.com/lt-selector/#notes-0), .slice è più veloce nei browser moderni. – Blaise

+0

Mi piace usare lo stile jQuery, è più elegante che concatenare. –

18

Ho trovato questa nota alla fine del lt() docs:

Additional Notes:
Because :lt() is a jQuery extension and not part of the CSS specification, queries using :lt() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").slice(0, index) instead.

in modo da utilizzare $("selector").slice(from, to) per le prestazioni migliori.

3

.slice() non è sempre migliore. Nel mio caso, con jQuery 1.7 in Chrome 36, .slice (0, 20) non riuscita con errore:

RangeError: Dimensione massima stack di chiamate superato

ho scoperto che: lt (20) ha lavorato senza errori in questo Astuccio. Avevo probabilmente decine di migliaia di elementi corrispondenti.

Problemi correlati