2014-06-19 14 views
25

Tôi đã viết một JS nhỏ để lặp qua một tập các phần tử phù hợp và thực hiện một số tác vụ trên mỗi phần tử.jQuery ném một lỗi rằng element.find() không phải là một hàm

Đây là mã:

var eachProduct = $(".item"); 

eachProduct.each(function(index, element){ 

       var eachProductContent = element.find(".product-meta").clone(); 
}); 

Khi tôi an ủi đăng nhập element nó ra đúng cách và các đối tượng chính xác. Tại sao nên jquery ném lỗi này?

Trả lời

34

element là một yếu tố dom không phải là một đối tượng jQuery

var eachProductContent = $(element).find(".product-meta").clone(); 

Bên trong each() handler bạn sẽ nhận được tài liệu tham khảo yếu tố dom như tham số thứ hai, không phải là một tài liệu tham khảo đối tượng jQuery. Vì vậy, nếu bạn muốn truy cập bất kỳ phương thức jQuery nào trên phần tử thì bạn cần lấy các đối tượng jQuery wrapper của các phần tử.

6

Bạn đang kêu gọi .find() trên một đối tượng JS đơn giản, Nhưng chức năng đó thuộc về đối tượng Jquery

var eachProductContent = $(element).find(".product-meta").clone(); 

Bạn có thể chuyển nó sang một đối tượng jquery bằng cách gói nó bên $(). Và để tránh sự khác biệt này, bạn có thể chỉ cần sử dụng tham chiếu $(this) thay vì sử dụng khác.

5

bạn nên thay đổi "nguyên tố" sang "này":

var eachProduct = $(".item"); 

eachProduct.each(function(index, element){ 

       var eachProductContent = $(this).find(".product-meta").clone(); 
}); 
4

Sử dụng $(this) cho phần tử hiện tại

var eachProductContent = $(this).find(".product-meta").clone(); 
Các vấn đề liên quan