Javascript 使用jQuery通过.each()获取数据属性值

Javascript 使用jQuery通过.each()获取数据属性值,javascript,jquery,each,html5-data,Javascript,Jquery,Each,Html5 Data,我有以下带有数据属性的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">

我有以下带有数据属性的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">

item
不是jQuery对象,每个
的参数都是索引和本机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.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);

我知道您应该使用$(项目),而不是仅使用数据。请查找以下代码:

<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>

var multi=$('.winners');
var\u数组=[];
$。每个(多功能)(索引,项目){
winners_array.push({name:'fullname',value:$(item.data('fullname'))});
});
console.log(winners\u数组);

这仅在IE11中受支持,而在较旧的浏览器中通常根本不受支持。最好使用
getAttribute('data-fullname')
。另外请注意,jQuery的
data()
在内部存储数据,因此如果使用
data()
设置或更改该值,也不会起作用。您确定吗?我刚在Chrome控制台上验证过。太好了。这正是我想要的$(项目).attr(“[数据位置]”);不是为我工作。
<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>