2009-12-08 13 views
184

mit jQuery auswählen, ich brauche nur die ersten „n“ Elemente aus der Seite zu wählen, zum Beispiel der ersten 20 Links statt alle mit den üblichendie ersten „n“ Elemente mit jQuery

$("a") 
Auswahl

Klingt einfach, aber das jQuery-Handbuch hat keine Hinweise auf so etwas.

Antwort

324

Sie wahrscheinlich auf slice lesen wollen. Ihr Code wird wie folgt aussehen:

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

Obwohl der ': lt (20)' Ansatz viel sauberer aussieht, ist die Verwendung von slice * viel * effizienter, wenn Sie ein großes Ergebnis haben, um damit zu beginnen. Bei der Auswertung von ": lt" und anderen Positionsselektoren führt ** jQuery leider eine Schleife durch den gesamten Satz **, auch wenn es nur das erste Element erhält. Ich habe mehr darüber in meinem Blog hier geschrieben: http://spadgos.com/?p=51 – nickf

+1

Vielen Dank, eine Seitenanforderung meiner Anfrage war über Aufführungen, also das ist die richtige Antwort für mich. Danke an die anderen für das Hinweisen auf den: lt Selektor. – Omiod

+2

Informativer Kommentar von @nickf, aber der Blog-Link und Graph Link scheint nicht zu funktionieren – Fractalf

74

Verwenden lt pseudo selector:

$("a:lt(n)") 

Dies entspricht die Elemente vor dem n-ten einem (das n-te Elemente ausgeschlossen). Die Nummerierung beginnt von 0.

+11

[Laut den jQuery-Dokumenten] (http://api.jquery.com/lt-selector/#notes-0) ist .slice in modernen Browsern schneller. – Blaise

+0

Ich mag die Verwendung von jQuery Stil, es ist eleganter, als Verkettung. –

18

fand ich diese Notiz am Ende der 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.

So $("selector").slice(from, to) für bessere Leistungen verwenden.

3

.slice() ist nicht immer besser. In meinem Fall mit jQuery 1.7 in Chrome 36, .slice (0, 20) fehlgeschlagen mit Fehlern:

Auslöser Range: maximale Anrufstapelgröße

I überschritten wird, die gefunden: lt (20) in dieser fehlerfrei gearbeitet Fall. Ich hatte wahrscheinlich Zehntausende von passenden Elementen.

Verwandte Themen