2009-12-08 13 views
184

con jQuery, necesito seleccionar sólo los primeros elementos "n" de la página, por ejemplo, los primeros 20 enlaces en lugar de seleccionar todos ellos con el habitualSelección de los primeros artículos "n" con jQuery

$("a") 

Suena simple pero el manual de jQuery no tiene evidencia de algo como esto.

Respuesta

324

es probable que desee leer sobre slice. Su código se verá algo como esto:

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

Aunque el enfoque ': lt (20)' parece mucho más limpio, usar slice es * mucho * más eficiente si tiene un gran conjunto de resultados para comenzar. Desafortunadamente, al evaluar ": lt" y otros selectores posicionales, ** jQuery recorre todo el conjunto **, incluso si solo está obteniendo el primer elemento. He escrito más sobre esto en mi blog aquí: http://spadgos.com/?p=51 – nickf

+1

Gracias, un requisito adicional de mi pedido fue sobre las actuaciones, por lo que esta es la respuesta correcta para mí. Gracias a los otros por señalar el selector: lt también. – Omiod

+2

Comentario informativo de @nickf, pero el enlace del blog y el enlace del gráfico no parecen funcionar – Fractalf

74

Uso lt seudo selector:

$("a:lt(n)") 

Esto coincide con los elementos antes de la n-ésima (el elemento n-ésimo excluido). La numeración comienza desde 0.

+11

[Según jQuery Docs] (http://api.jquery.com/lt-selector/#notes-0), .slice es más rápido en los navegadores modernos. – Blaise

+0

Me gusta el uso del estilo jQuery, es más elegante que el encadenado. –

18

me encontré con esta nota al final de la 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.

a fin de utilizar $("selector").slice(from, to) para un mejor rendimiento.

3

.slice() no siempre es mejor. En mi caso, con jQuery 1.7 en Chrome 36, .slice (0, 20) con error:

RangeError: El tamaño máximo de pila de llamadas superó

encontré que: lt (20) trabajó sin error en este caso. Probablemente tenía decenas de miles de elementos coincidentes.

Cuestiones relacionadas