2012-01-10 29 views
6

Tôi đang làm việc với một ứng dụng sử dụng cả jQuery và underscore.js. Tôi muốn có thể sử dụng một số chức năng lặp của gạch dưới, chẳng hạn như any()all() trên một tập hợp các đối tượng jQuery. Có cách nào để làm việc này không? Tôi muốn làm điều gì đó tương tự như sau:sử dụng chức năng danh sách underscore.js trên bộ sưu tập các đối tượng jquery

checkboxes = $("input[type=checkbox]"); 
_.filter(checkboxes, function(box) { 
    return box.is(":checked"); 
}); 

nhưng điều này ném một lỗi:

Uncaught TypeError: Object #<HTMLInputElement> has no method 'is' 

vì vậy tôi giả sử hộp trong bối cảnh này không được đóng vai trò như là một đối tượng jQuery .

+1

có lý do để không chỉ thực hiện '$ (" đầu vào [loại = hộp kiểm]: đã chọn ")'? – Esailija

+0

tôi có thể làm điều đó trong trường hợp này, nhưng tôi đã hỏi về tất cả các phương thức tương tác gạch dưới nói chung, bao gồm _.any(), _.all(), v.v. – GSto

+2

Bạn rất hiếm khi cần jQuery khi xử lý một phần tử tại một thời gian, ví dụ bạn có thể vừa thực hiện 'return box.checked'; – Esailija

Trả lời

13

Bạn phải quấn box trong jQuery:

checkboxes = $("input[type=checkbox]"); 
checkboxes = _.filter(checkboxes, function(box) { 
    return $(box).is(":checked"); 
}); 

Ngoài ra, thay vì tạo ra một đối tượng mới cho mỗi yếu tố duy nhất trong bộ sưu tập, bạn có thể chỉ cần sử dụng có nguồn gốc box.checked:

checkboxes = $("input[type=checkbox]"); 
checkboxes = _.filter(checkboxes, function(box) { 
    return box.checked; 
}); 

Trên ghi chú bên:jQuery has its own filter method:

checkboxes = $("input[type=checkbox]").filter(function() { 
    return $(this).is(":checked"); 
}); 

Ngoài ra, trong ví dụ của bạn - bạn có chắc chắn phải lọc không? Bạn có thể dễ dàng sử dụng điều đó làm công cụ chọn của mình:

checkboxes = $("input[type=checkbox]:checked") 
+0

bộ lọc chỉ là một ví dụ. Tôi cũng nghĩ đến việc sử dụng _.any, _.all và một số trường hợp khác. – GSto

+0

@ Joseph, cảm ơn - điều này đã giúp tôi. Bạn có thể vui lòng giải thích tại sao 'Bạn có để bọc hộp trong jQuery'? –

+0

@KevinMeredith - bất cứ khi nào bạn lặp qua bộ sưu tập jQuery, các mục riêng lẻ với nó là các phần tử vani DOM đơn giản. Nếu bạn muốn có được chức năng jQuery, bạn phải tạo một cá thể jQuery mới. –

1

Đây box là đối tượng loại HTMLInputElement. Nó không phải là một đối tượng jQuery. Vì .is là một phương thức đối tượng jQuery, bạn cần đối tượng jQuery từ box.

Nó có thể được thực hiện bởi, $(box). Sau đó, áp dụng .is().

$(box).is(":checked"); 
Các vấn đề liên quan