Selezione dei primi "n" elementi con jQuery


217

Con Jquery, devo selezionare solo i primi "n" elementi dalla pagina, ad esempio i primi 20 collegamenti invece di selezionarli tutti con il solito

$("a")

Sembra semplice ma il manuale di jQuery non ha prove di qualcosa del genere.

Risposte:


378

Probabilmente vuoi leggere su slice . Il tuo codice sarà simile a questo:

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

65
Sebbene l' :lt(20)approccio appaia molto più pulito, l'utilizzo di slice è molto più efficiente se si desidera iniziare con un grande set di risultati. Sfortunatamente, quando si valuta ": lt" e altri selettori di posizione, jQuery scorre l'intero set , anche se sta ottenendo solo il primo elemento. Ho scritto di più su questo sul mio blog qui: spadgos.com/?p=51
nickf

1
Grazie, un requisito secondario della mia richiesta riguardava le esibizioni, quindi questa è la risposta giusta per me. Grazie agli altri per aver sottolineato anche il selettore: lt.
Omiod,

3
Commento informativo di @nickf, ma il collegamento al blog e il collegamento grafico non sembrano funzionare
Fractalf,

1
Non posso modificare ora mi dispiace - fondamentalmente, l'utilizzo di slice era molto più veloce.
nickf,

92

Usa lo pseudo-selettore:

$("a:lt(n)")

Questo corrisponde agli elementi prima dell'ennesimo (l'ennesimo elemento escluso). La numerazione inizia da 0.


13
Secondo jQuery Docs , .slice è più veloce nei browser moderni.
Blaise,

1
Mi piace l'uso dello stile jQuery, è più elegante del concatenamento.
Fedir RYKHTIK,

22

Ho trovato questa nota alla fine dei documenti lt () :

Note aggiuntive:
Poiché: lt () è un'estensione jQuery e non fa parte della specifica CSS, le query che utilizzano: lt () non possono sfruttare l'incremento delle prestazioni fornito dal metodo querySelectorAll () DOM nativo. Per prestazioni migliori nei browser moderni, utilizzare $ ("your-pure-css-selector"). Slice (0, indice).

Quindi utilizzare $("selector").slice(from, to)per prestazioni migliori.



7

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

RangeError: dimensione massima dello stack di chiamate superata

Ho scoperto che: lt (20) ha funzionato senza errori in questo caso. Probabilmente avevo decine di migliaia di elementi corrispondenti.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.