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.

Antworten:


378

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

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

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.


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.



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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.