Выбор первых «n» элементов с помощью jQuery

217

С помощью Jquery мне нужно выбрать только первые «n» элементов на странице, например, первые 20 ссылок вместо того, чтобы выбирать все с обычными

$("a")

Звучит просто, но в руководстве по jQuery нет доказательств чего-то подобного.

Omiod
источник

Ответы:

378

Вы, вероятно, хотите прочитать на слайсе . Ваш код будет выглядеть примерно так:

$("a").slice(0,20)
istruble
источник
65
Хотя :lt(20)подход выглядит намного чище, использование слайса намного эффективнее, если у вас большой набор результатов для начала. К сожалению, при оценке ": lt" и других позиционных селекторов jQuery проходит по всему набору , даже если он просто получает первый элемент. Я написал больше об этом в своем блоге здесь: spadgos.com/?p=51
nickf
1
Спасибо, побочное требование моего запроса было о выступлениях, так что это правильный ответ для меня. Спасибо другим за указание на селектор: lt.
Omiod
3
Информативный комментарий @nickf, но ссылка на блог и графическая ссылка, похоже, не работают
Fractalf
1
Не могу редактировать сейчас извините - в основном, использование слайса было намного быстрее.
Ник
92

Используйте псевдо-селектор lt:

$("a:lt(n)")

Это соответствует элементам до n-го (исключая n-й элемент). Нумерация начинается с 0.

kgiannakakis
источник
13
Согласно JQuery Docs , .slice быстрее в современных браузерах.
Блейз
1
Мне нравится использование стиля jQuery, он более элегантный, чем цепочка.
Федир Рыхтик
23

Я нашел это примечание в конце документа lt () :

Дополнительные примечания:
Поскольку: lt () является расширением jQuery и не является частью спецификации CSS, запросы, использующие: lt (), не могут воспользоваться преимуществами повышения производительности, обеспечиваемыми собственным методом DOM querySelectorAll (). Для повышения производительности в современных браузерах используйте $ ("your-pure-css-selector"). Slice (0, index).

Так что используйте $("selector").slice(from, to)для лучшей производительности.

Арлинд Нуши
источник
7

.slice () не всегда лучше. В моем случае, с jQuery 1.7 в Chrome 36, .slice (0, 20) завершился ошибкой:

RangeError: превышен максимальный размер стека вызовов

Я обнаружил, что: lt (20) работал без ошибок в этом случае. У меня было, вероятно, десятки тысяч соответствующих элементов.

Кевин Гвинн
источник