18

データ属性を含む次の HTML があります。HTML をループしてデータ属性を収集し、それらを配列に入れる jQuery を書きたいのですが、エラーが発生したので、誰か助けてください。

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
4

3 に答える 3

36

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')}
});
于 2014-01-23T11:43:55.877 に答える
6

データのみではなく、$(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>
于 2014-01-23T11:54:22.693 に答える
3

代わりに 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);
于 2014-01-23T11:45:16.547 に答える