Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery,如何在元素上选择与动态相关的数据键并将它们输出到数组中?_Javascript_Jquery - Fatal编程技术网

Javascript 使用jQuery,如何在元素上选择与动态相关的数据键并将它们输出到数组中?

Javascript 使用jQuery,如何在元素上选择与动态相关的数据键并将它们输出到数组中?,javascript,jquery,Javascript,Jquery,例如,给定以下HTML: <div class="playlist" data-name1="Some Name 1" data-value1="123" data-name2="Some Name 2" data-value2="456" data-name3="Some Name 3" data-value3="789" ></div> 下面是我考虑过的一些伪代码,但显然不起作用: array = [] $

例如,给定以下HTML:

<div class="playlist"
     data-name1="Some Name 1"
     data-value1="123"
     data-name2="Some Name 2"
     data-value2="456"
     data-name3="Some Name 3"
     data-value3="789"
></div>
下面是我考虑过的一些伪代码,但显然不起作用:

array = []
$(".playlist").attr("data-name-*, data-value-*").each(function(name, value){
   array.push({"name": name, "value": value});
  }
})
return array;

有什么想法吗?

这可以给你一些可以合作的东西。它起作用了

array = []
  $.each($('.playlist')[0].attributes, function(i, attrib){
    array.push({name : attrib.name, value : attrib.value});

  });
  console.log(array);
var attributes = $('.playlist')[0].attributes;
var total_attr = attributes.length - 1;

var test = [];
for (var i = 1; i < attributes.length; i += 2) {
    var attr = attributes[i];
    var value = attributes[i+1];
    var temp = {};

    temp['name' + i] = attr.nodeValue;
    temp['value' + i] = value.nodeValue;
    test.push(temp)
}
console.log(test)
var attributes=$('.playlist')[0]。属性;
var total_attr=attributes.length-1;
var检验=[];
对于(变量i=1;i
var length\u data=Object.keys($(“.playlist”).data()).length/2;
var数据=[]

对于(i=1;如果您想获得upvote或mark,我需要创建演示。感谢您提供的优秀解决方案Khaled。我确实注意到它添加了不需要的对象。我们也可以删除它们吗?例如,我使用此HTML元素尝试过,发现添加了不需要的对象。对于我之前的混乱评论,我很抱歉:)您的解决方案看起来很棒。但我注意到它添加了一个未定义的额外对象:[{“name”:“Some name 1”,“value”:“123”},{“name”:“Some name 2”,“value”:“456”},{“name”:“Some name 3”,“value”:“789”},{“name”:未定义,“value”:未定义}你知道是什么导致了这个问题吗?是的,因为我用属性的数量来计算长度,若你们有更多的属性,那个么它将循环“data-name4”,这是未定义的。要防止出现这种情况,可以添加:
如果(typeof$(“.playlist”).attr('data-name'+i)=“undefined”| typeof$(“.playlist”).attr('data-value'+i)=“undefined”)继续推之前,检查更新JSFIDLE:我确信有更好的解决方案,但我认为它是有效的。太棒了!感谢更新的解决方案。这对我很有用。非常感谢你,罗西:)谢谢你。我确实得到了一个“未捕获的TypeError:无法读取未定义的”错误的属性“length”。我将属性更改为$('.playlist')[0]。属性,但仍然出现“无法读取未定义的属性'nodeValue'”错误。不过我很感谢你的帮助。我从A.Rossi那里得到了上面的解决方案,但非常感谢你试图帮助我是的,现在效果很好:)谢谢你e4en。我接受了A.罗西的上述解决方案,我希望我也能接受你的解决方案。你的解决方案也很有效。非常感谢你
var attributes = $('.playlist')[0].attributes;
var total_attr = attributes.length - 1;

var test = [];
for (var i = 1; i < attributes.length; i += 2) {
    var attr = attributes[i];
    var value = attributes[i+1];
    var temp = {};

    temp['name' + i] = attr.nodeValue;
    temp['value' + i] = value.nodeValue;
    test.push(temp)
}
console.log(test)
var length_data = Object.keys($(".playlist").data()).length/2;

var data = []
for (i = 1; i <= length_data; i++) {
    data.push({"name" : $(".playlist").attr('data-name'+i), "value" : $(".playlist").attr('data-value'+i)} )
}
var length_data = Object.keys($(".playlist").data()).length/2;

var data = []
for (i = 1; i <= length_data; i++) {
    if (typeof $(".playlist").attr('data-name'+i) == "undefined" || typeof $(".playlist").attr('data-value'+i) == "undefined" ) continue;
        data.push({"name" : $(".playlist").attr('data-name'+i), "value" : $(".playlist").attr('data-value'+i)} )

}