好的,所以最终的解决方案,结合我在网上找到的东西加上@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() 处理数据值,然后使用@adeneo 的方法处理字符串数组。
data.value = JSON.parse(data.value);
data.label = data.label.split(',').map(function(val) { return val.trim().replace(/(\'|\[|\])/g,''); });
出于我自己的其他 js 代码的目的,我只是从密钥中删除数据,现在一切都是 kosher !
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,找到具有特定类名的所有元素,然后只需解析属性即可触发调用。:)