Javascript 使用jQuery,如何在元素上选择与动态相关的数据键并将它们输出到数组中?
例如,给定以下HTML: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 = [] $
<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)} )
}