我编写了一个小型JS来迭代一组匹配的元素,并对每个元素执行一些任务。
以下是代码:
var eachProduct = $(".item");
eachProduct.each(function(index, element){
var eachProductContent = element.find(".product-meta").clone();
});
当我控制日志element
时,它会正确输出并输出确切的对象。为什么jquery会抛出这个错误?
答案 0 :(得分:53)
因为element
是dom元素而不是jQuery对象
var eachProductContent = $(element).find(".product-meta").clone();
在each()
处理程序中,您将获取dom元素引用作为第二个参数,而不是jQuery对象引用。因此,如果您想访问元素上的任何jQuery方法,那么您需要获取元素jQuery包装器对象。
答案 1 :(得分:7)
您在普通JS对象上调用.find()
,但该函数属于Jquery对象
var eachProductContent = $(element).find(".product-meta").clone();
您可以将其包装在$()
内,将其转换为jquery对象。为了避免这种差异,您只需使用$(this)
引用而不是使用其他引用。
答案 2 :(得分:5)
你应该将“element”改为“this”:
var eachProduct = $(".item");
eachProduct.each(function(index, element){
var eachProductContent = $(this).find(".product-meta").clone();
});
答案 3 :(得分:4)
将$(this)
用于当前元素
var eachProductContent = $(this).find(".product-meta").clone();