Использование jQuery для получения значений атрибутов данных с помощью.each()
У меня есть следующий HTML-код с атрибутами данных - я хочу написать jQuery, который будет проходить через HTML-код, собирать атрибуты данных и помещать их в массив - может кто-нибудь помочь, так как я получаю сообщение об ошибке.
ERROR in console log : item.data is not a function
Я пытаюсь использовать атрибут data() - вы видите, что я делаю неправильно?
// Мой код HTML
<span class="winners" data-userid="123" data-position="1" data-fullname="neil">
<span class="winners" data-userid="234" data-position="2" data-fullname="Ron">
<span class="winners" data-userid="421" data-position="3" data-fullname="Philip">
// мой код jQuery
var multi = $('.winners');
var winners_array = [];
$.each(multi, function (index, item) {
winners_array.push( {name: 'fullname', value: item.data('fullname')} );
});
console.log(winners_array);
// ERROR in console log : item.data is not a function
3 ответа
Решение
item
не является объектом jQuery, аргументы для each
это индекс и собственный элемент DOM
var multi = $('.winners');
var winners_array = [];
$.each(multi, function (index, item) {
winners_array.push( {name: 'fullname', value: $(item).data('fullname')} );
});
использовать карту будет проще
var winners_array = $.map($('.winners'), function(el) {
return {name: 'fullname', value: $(el).data('fullname')}
});
Я понимаю, что вы должны использовать $(item) вместо данных. Пожалуйста, найдите код ниже:
<script type="text/javascript">
var multi = $('.winners');
var winners_array = [];
$.each(multi, function (index, item) {
winners_array.push( {name: 'fullname', value: $(item).data('fullname')} );
});
console.log(winners_array);
</script>
Вместо этого используйте item.dataset.fullname.
var multi = $('.winners');
var winners_array = [];
$.each(multi, function (index, item) {
winners_array.push( {name: 'fullname', value: item.dataset.fullname} );
});
console.log(winners_array);