好的,所以综合了我在网上找到的东西以及@Vega和@adeneo的答案,最终的解决方案如下:
使用以下jQuery方法允许我通过调用空白attr()获取所有内容:
(function($) {
var _old = $.fn.attr;
$.fn.attr = function() {
if (this[0] && arguments.length === 0) {
var map = {};
var i = this[0].attributes.length;
while (i--) {
map[this[0].attributes[i].name.toLowerCase()] = this[0].attributes[i].value;
}
return map;
} else {
return _old.apply(this, arguments);
}
}
}(jQuery));
我可以这样获取所有属性:
var data = $(document.getElementById(id)).attr();
因此,我将保持元素属性与之前完全相同(包括HTML5的调整):
<div id="helloworld"
data-call="chart"
data-width="350"
data-height="200"
data-stacked="true"
data-value="[[4, 8, 1, 88, 21],[45, 2, 67, 11, 9],[33, 4, 63, 4, 1]]"
data-label="['test1', 'test2', 'test3', 'test4', 'test5']"/>
我随后使用 JSON.parse() 来处理 data-value 数据,然后使用 @adeneo 的方法来处理字符串数组。
data.value = JSON.parse(data.value);
data.label = data.label.split(',').map(function(val) { return val.trim().replace(/(\'|\[|\])/g,''); });
为了我的其他js代码的目的,我只需从键中删除data-,现在一切都很好!!
for (key in data) {
var newKey = key.replace("data-","");
if (newKey != key) {
data[newKey] = data[key];
delete data[key];
}
}
现在我可以将数据传递给我的现有函数了!!!:)
之前我如何调用我的函数:
var data = {
id: 'helloworld',
width: 350,
height: 200,
value: [
[4, 8, 1, 88, 21],
[45, 2, 67, 11, 9],
[33, 4, 63, 4, 1]
],
stacked: true,
label: ["test1", "test2", "test3", "test4", "test5"]
};
chart(data);
现在我可以使用jQuery,找到所有具有特定类名的元素,然后只需解析属性以触发调用。 :)
[data-*]
属性,否则不应定义自己的自定义属性。 - zzzzBov