Auswählen der ersten "n" Elemente mit jQuery

217

Bei Jquery muss ich nur die ersten "n" Elemente auf der Seite auswählen, z. B. die ersten 20 Links, anstatt alle mit den üblichen Links auszuwählen

$("a")

Klingt einfach, aber das jQuery-Handbuch enthält keine Hinweise auf so etwas.

Omiod
quelle

Antworten:

378

Sie möchten wahrscheinlich auf Slice nachlesen . Ihr Code sieht ungefähr so ​​aus:

$("a").slice(0,20)
istruble
quelle
65
Obwohl der :lt(20)Ansatz viel sauberer aussieht, ist die Verwendung von Slice viel effizienter, wenn Sie zunächst eine große Ergebnismenge haben. Leider durchläuft jQuery bei der Auswertung von ": lt" und anderen Positionsselektoren den gesamten Satz , auch wenn es nur das erste Element erhält. Ich habe mehr darüber in meinem Blog hier geschrieben: spadgos.com/?p=51
nickf
1
Vielen Dank, eine Nebenanforderung meiner Anfrage betraf Auftritte, daher ist dies die richtige Antwort für mich. Vielen Dank an die anderen für den Hinweis auf den: lt-Selektor.
Omiod
3
Informativer Kommentar von @nickf, aber der Blog-Link und der Grafik-Link scheinen nicht zu funktionieren
Fractalf
1
Kann jetzt leider nicht bearbeitet werden - im Grunde war die Verwendung von Slice viel schneller.
Nickf
92

Verwenden Sie den Pseudo-Selektor:

$("a:lt(n)")

Dies entspricht den Elementen vor dem n-ten (das n-te Element ausgeschlossen). Die Nummerierung beginnt bei 0.

kgiannakakis
quelle
13
Laut jQuery Docs ist .slice in modernen Browsern schneller.
Blaise
1
Ich mag die Verwendung des jQuery-Stils, er ist eleganter als die Verkettung.
Fedir RYKHTIK
22

Ich habe diesen Hinweis am Ende der lt () - Dokumentation gefunden :

Zusätzliche Hinweise:
Da: lt () eine jQuery-Erweiterung ist und nicht Teil der CSS-Spezifikation ist, können Abfragen mit: lt () die Leistungssteigerung der nativen DOM-Methode querySelectorAll () nicht nutzen. Verwenden Sie stattdessen $ ("your-pure-css-selector"). Slice (0, index), um eine bessere Leistung in modernen Browsern zu erzielen.

Verwenden Sie es also $("selector").slice(from, to)für bessere Leistungen.

Arlind Nushi
quelle
7

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

RangeError: Maximale Aufrufstapelgröße überschritten

Ich fand, dass: lt (20) in diesem Fall fehlerfrei funktionierte. Ich hatte wahrscheinlich Zehntausende von passenden Elementen.

Kevin Gwynn
quelle