Wybieranie pierwszych „n” elementów za pomocą jQuery

217

W Jquery muszę wybrać tylko pierwsze „n” elementy ze strony, na przykład pierwsze 20 linków zamiast wybierać je wszystkie zwykłymi

$("a")

Brzmi prosto, ale instrukcja jQuery nie ma dowodów na coś takiego.

Omiod
źródło

Odpowiedzi:

378

Prawdopodobnie chcesz przeczytać fragment . Twój kod będzie wyglądał mniej więcej tak:

$("a").slice(0,20)
istruble
źródło
65
Chociaż :lt(20)podejście wygląda na znacznie czystsze, stosowanie wycinania jest o wiele bardziej wydajne, jeśli masz duży zestaw wyników na początek. Niestety, podczas oceny „: lt” i innych selektorów pozycyjnych, jQuery zapętla cały zestaw , nawet jeśli otrzymuje tylko pierwszy element. Więcej o tym napisałem na moim blogu tutaj: spadgos.com/?p=51
nickf
1
Dziękuję, poboczny wymóg mojej prośby dotyczył występów, więc to dla mnie odpowiednia odpowiedź. Dziękujemy innym za wskazanie selektora: lt.
Omiod
3
Komentarz informacyjny @nickf, ale link do blogu i link do wykresu nie wydają się działać
Fractalf,
1
Nie można teraz edytować przepraszam - w zasadzie użycie wycinka było znacznie szybsze.
nickf
92

Użyj lt pseudo selektora:

$("a:lt(n)")

To dopasowuje elementy przed n-tym (z wyłączeniem n-tego elementu). Numeracja zaczyna się od 0.

kgiannakakis
źródło
13
Według jQuery Docs , .slice jest szybszy w nowoczesnych przeglądarkach.
Blaise,
1
Lubię używać stylu jQuery, jest bardziej elegancki niż łańcuchowy.
Fedir RYKHTIK
22

Znalazłem tę notatkę na końcu dokumentacji lt () :

Dodatkowe uwagi:
Ponieważ: lt () jest rozszerzeniem jQuery i nie jest częścią specyfikacji CSS, zapytania wykorzystujące: lt () nie mogą skorzystać ze zwiększenia wydajności zapewnianego przez natywną metodę DOM querySelectorAll (). Aby uzyskać lepszą wydajność w nowoczesnych przeglądarkach, zamiast tego użyj $ („twój-czysty-css-selektor”). Slice (0, indeks).

Więc użyj $("selector").slice(from, to)dla lepszych wyników.

Arlind Nushi
źródło
7

.slice () nie zawsze jest lepszy. W moim przypadku, z jQuery 1.7 w Chrome 36, .slice (0, 20) nie powiodło się z błędem:

RangeError: Przekroczono maksymalny rozmiar stosu wywołań

Odkryłem, że: lt (20) działało bezbłędnie w tym przypadku. Miałem prawdopodobnie dziesiątki tysięcy pasujących elementów.

Kevin Gwynn
źródło