jQuery выдает ошибку, что element.find() не является функцией

#javascript #jquery

#javascript #jquery

Вопрос:

Я написал небольшой JS для перебора набора сопоставленных элементов и выполнения некоторой задачи над каждым из них.

Вот код:

 var eachProduct = $(".item");

eachProduct.each(function(index, element){

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

Когда я регистрирую консоль element , он выводит правильные и точные объекты. Почему jquery должен выдавать эту ошибку?

Ответ №1:

потому element что это элемент dom, а не объект jQuery

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

Внутри each() обработчика вы получите ссылку на элемент dom в качестве второго параметра, а не ссылку на объект jQuery. Поэтому, если вы хотите получить доступ к любым методам jQuery в элементе, вам нужно получить объект-оболочку elements jQuery.

Комментарии:

1. Но что, если мне нужно поработать с этим eachProduct внутри each ?

2. @EgoPingvina Вы можете просто использовать $(this) istead of element .

Ответ №2:

Вы вызываете .find() простой объект JS, но эта функция принадлежит объекту Jquery

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

Вы можете преобразовать его в объект jquery, обернув его внутри $() . И чтобы избежать такого рода несоответствий, вы можете просто использовать $(this) reference вместо использования other .

Ответ №3:

Использовать $(this) для текущего элемента

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

Ответ №4:

вы должны изменить «элемент» на «это»:

 var eachProduct = $(".item");

eachProduct.each(function(index, element){

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