Selecionando os primeiros itens "n" com o jQuery


217

Com o Jquery, preciso selecionar apenas os primeiros "n" itens da página, por exemplo, os primeiros 20 links, em vez de selecionar todos eles com o costume

$("a")

Parece simples, mas o manual do jQuery não tem evidências de algo assim.

Respostas:


378

Você provavelmente quer ler sobre uma fatia . Seu código será mais ou menos assim:

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

65
Embora a :lt(20)abordagem pareça muito mais limpa, o uso da fatia é muito mais eficiente se você tiver um grande resultado definido para começar. Infelizmente, ao avaliar ": lt" e outros seletores de posição, o jQuery percorre todo o conjunto , mesmo que esteja apenas obtendo o primeiro elemento. Eu escrevi mais sobre isso no meu blog aqui: spadgos.com/?p=51
nickf

1
Obrigado, um requisito paralelo do meu pedido era sobre performances, então essa é a resposta certa para mim. Obrigado aos outros por apontar o seletor: lt também.
830 Omiod

3
Comentário informativo por @nickf, mas o link do blog e um link gráfico não parecem funcionar
Fractalf

1
Não é possível editar agora, desculpe - basicamente, o uso do slice foi muito mais rápido.
nickf 29/10


22

Eu encontrei esta nota no final dos documentos lt () :

Notas adicionais:
Como: lt () é uma extensão jQuery e não faz parte da especificação CSS, as consultas usando: lt () não podem tirar proveito do aumento de desempenho fornecido pelo método DOM querySelectorAll () nativo do DOM. Para um melhor desempenho em navegadores modernos, use $ ("your-pure-css-selector"). Slice (0, index).

Então use $("selector").slice(from, to)para melhores performances.



7

.slice () nem sempre é melhor. No meu caso, com o jQuery 1.7 no Chrome 36, o .slice (0, 20) falhou com o erro:

RangeError: tamanho máximo da pilha de chamadas excedido

Eu descobri que: lt (20) funcionou sem erros neste caso. Eu provavelmente tinha dezenas de milhares de elementos correspondentes.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.