2015-02-25 17 views
5

chúng ta có thể sử dụng $('body>div:lt(2)') để có được 2 DIV s đầu tiên trong body, nếu body>div đã được gán cho một biến:Làm cách nào chúng ta có thể áp dụng bộ chọn giả cho biến jQuery DOM?

var s = $('body>div') 

chúng ta vẫn có thể sử dụng bộ chọn giả hoặc những cách khác để có được 2 DIV đầu tiên trong refrence để biến? Tất nhiên, s: lt (2) sẽ không hoạt động. Những gì tôi có thể nghĩ là $(s.slice(0,2)), nhưng có cách nào tốt hơn để làm điều này?

Trả lời

5

Bạn có thể sử dụng phương pháp .filter() của jQuery, cho phép, trong số những thứ khác, một đối số bộ chọn để lọc các nút được chọn trong một đối tượng jQuery.

var filtered = s.filter(':lt(2)'); 

Lưu ý rằng điều này không thay đổi giá trị ban đầu của s, vì vậy bạn sẽ có tất cả các div của bạn trong s, và bạn lọc div s trong filtered.


Ngoài ra, như bạn đã nêu và đã được thảo luận trong các ý kiến, bạn có thể sử dụng Array.prototype.slice.

var sliced = $(s.slice(0,2)); 

Kỹ thuật này hoạt động nhanh hơn .filter(). Tuy nhiên, nó cũng có thể làm cho mã của bạn ít dễ đọc hơn/dễ hiểu hơn. Hiệu suất đạt được cũng có khả năng cực kỳ không đáng kể trừ khi bạn thực hiện thao tác này hàng nghìn lần hoặc hơn trong một khoảng thời gian rất ngắn.

Khả năng đọc so với hiệu suất là một trận chiến thường xuyên diễn ra trong lập trình và cuối cùng bạn là người duy nhất có thể quyết định chiến thắng nào giành được cho mã của riêng bạn.

+0

Về hiệu suất, sử dụng 'slice()' là tốt hơn vì bạn đang dựa vào chức năng JS gốc. – AlexL

+0

1+ .. Tôi không thấy lý do tại sao điều này đã được bình chọn. Nó thực hiện chính xác những gì OP muốn. Hiệu suất có thể không đáng kể. –

+0

Nó đã được downvoted vì OP muốn một cách tốt hơn. Trong khi câu trả lời này cung cấp một cách tốt hơn về khả năng đọc, biến thể này không phải là tốt nhất về hiệu suất so với phương án được đề xuất của OP. – AlexL

Các vấn đề liên quan