2014-01-23 4 views
9

У меня есть следующий HTML с атрибутами данных - я хочу написать некоторый jQuery, который будет циклически проходить через HTML и собирать атрибуты данных и помещать их в массив - может кто угодно помогите, поскольку я получаю сообщение об ошибке.Использование jQuery для получения значений атрибутов данных с .each()

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 

ответ

24

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')} 
}); 
+1

+1 для дополнительного решения тоже – Zabs

+0

Отлично. Только то, что я искал. $ (Пункт) .attr ("[данные позиции]"); не работал для меня. –

+0

Блестящий! Благодаря! – sshirley

1

Используйте вместо этого 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); 
+0

спасибо! оба делают бизнес – Zabs

+1

Это поддерживается только в IE11 и вообще не поддерживается в старых браузерах вообще. Вам лучше использовать 'getAttribute ('data-fullname')'. Также обратите внимание, что 'data()' jQuery хранит данные внутри, поэтому, если значение установлено или изменено с помощью 'data()', это тоже не сработает. – adeneo

+0

Вы уверены? Я просто проверил его на консоли Chrome. – Jake

4

Я понимаю, что вы должны использовать $ (item), а не только данные. Просьба найти код ниже:

Смежные вопросы