Chọn các mục đầu tiên của Nv với jQuery


217

Với Jquery, tôi chỉ cần chọn các mục "n" đầu tiên từ trang, ví dụ: 20 liên kết đầu tiên thay vì chọn tất cả các mục đó với thông thường

$("a")

Nghe có vẻ đơn giản nhưng hướng dẫn sử dụng jQuery không có bằng chứng về điều gì đó như thế này.

Câu trả lời:


378

Bạn có thể muốn đọc lên trên lát . Mã của bạn sẽ trông giống như thế này:

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

65
Mặc dù :lt(20)cách tiếp cận trông giống sạch, sử dụng lát là nhiều hiệu quả hơn nếu bạn có một bộ kết quả lớn để bắt đầu. Thật không may, khi đánh giá ": lt" và các bộ chọn vị trí khác, các vòng lặp jQuery trong toàn bộ tập hợp , ngay cả khi nó chỉ nhận được phần tử đầu tiên. Tôi đã viết thêm về điều này trên blog của tôi ở đây: spadgos.com/?p=51
nickf

1
Cảm ơn bạn, một yêu cầu phụ của yêu cầu của tôi là về màn trình diễn, vì vậy đây là câu trả lời đúng cho tôi. Cảm ơn những người khác đã chỉ ra bộ chọn: lt quá.
Omiod

3
Nhận xét thông tin của @nickf, nhưng liên kết blog và liên kết biểu đồ dường như không hoạt động
Fractalf

1
Bây giờ không thể chỉnh sửa xin lỗi - về cơ bản, sử dụng lát cắt nhanh hơn rất nhiều.
nickf

92

Sử dụng bộ chọn giả lt:

$("a:lt(n)")

Cái này khớp với các phần tử trước phần thứ n (phần tử thứ n bị loại trừ). Đánh số bắt đầu từ 0.


13
Theo jQuery Docs , .slice nhanh hơn trong các trình duyệt hiện đại.
Blaise

1
Tôi thích việc sử dụng phong cách jQuery, nó thanh lịch hơn là xâu chuỗi.
Fedir RYKHTIK

22

Tôi đã tìm thấy ghi chú này ở phần cuối của tài liệu lt () :

Ghi chú bổ sung:
Bởi vì: lt () là một phần mở rộng của jQuery và không phải là một phần của đặc tả CSS, các truy vấn sử dụng: lt () không thể tận dụng hiệu suất tăng hiệu suất được cung cấp bởi phương thức DOM querySelectorAll (). Để có hiệu suất tốt hơn trong các trình duyệt hiện đại, hãy sử dụng $ ("your-thuần-css-selector"). Lát (0, chỉ mục) thay thế.

Vì vậy, sử dụng $("selector").slice(from, to)cho màn trình diễn tốt hơn.



7

.slice () không phải lúc nào cũng tốt hơn. Trong trường hợp của tôi, với jQuery 1.7 trong Chrome 36, .slice (0, 20) không thành công với lỗi:

RangeError: Vượt quá kích thước ngăn xếp cuộc gọi tối đa

Tôi thấy rằng: lt (20) làm việc không có lỗi trong trường hợp này. Tôi có thể có hàng chục ngàn yếu tố phù hợp.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.