Использование 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);
Другие вопросы по тегам