Почему не работает attr() в выборке?
Внутри 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-объекта, позволяющий хранить любой тип данных. Значение атрибута — лишь стартовое значение, преобразованное, по возможности, в наиболее подходящий тип (например, попробуйте задать в качестве значения атрибута массив).
через $(this) надо обращаться к атрибуту
console.log($(this).attr('data-item'));