#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 ofelement
.
Ответ №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();
});