Почему не работает attr() в выборке?

Добрый день!
Не пойму, почему не срабатывает attr для каждого элемента выборки.
Ошибка: Uncaught TypeError: undefined is not a function
js:
$('.js-to-cart').each(function(i, elem) {
  console.log(elem); // отрабатывает
  console.log(elem.attr('data-item')); // ошибка
});

html: 
<button data-item="0" class="js-to-cart"></button>
<button data-item="1" class="js-to-cart"></button>
<button data-item="2" class="js-to-cart"></button>
  • Вопрос задан
  • 19648 просмотров
Решения вопроса 3
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Внутри each() каждый elem — ссылка на натуральный DOM-элемент.

Так что либо так
$('.js-to-cart').each(function(i, elem) {
	console.log($(elem).attr('data-item'));
});

либо так
$('.js-to-cart').each(function() {
	console.log($(this).attr('data-item'));
});

А вот ещё несколько приёмов
$('.js-to-cart').each(function(i, elem) {
	console.log(elem.dataset.item);
	console.log($(elem).attr('data-item'));
	console.log($(elem).data('item'));

	console.log(this.dataset.item);
	console.log($(this).attr('data-item'));
	console.log($(this).data('item'));
});

Нужно помнить, что data() в jQuery — не совсем то же самое, что и data-атрибуты. Это — метод у jQuery-объекта, позволяющий хранить любой тип данных. Значение атрибута — лишь стартовое значение, преобразованное, по возможности, в наиболее подходящий тип (например, попробуйте задать в качестве значения атрибута массив).
Ответ написан
Комментировать
@kirill-93
через $(this) надо обращаться к атрибуту
console.log($(this).attr('data-item'));
Ответ написан
flashg
@flashg
$('.js-to-cart').each(function() {
  console.log($(this));
  console.log($(this).attr('data-item'));
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы