给定一个具有零个或多个 data-*
属性的任意 HTML 元素,如何检索数据的键-值对列表。
例如:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
我希望能够通过编程检索这个:
{ "id":10, "cat":"toy", "cid":42 }
使用 jQuery (v1.4.3) ,如果提前知道键,那么使用 $.data()
访问单个数据比特非常简单,但是如何使用任意数据集进行访问并不明显。
我正在寻找一个“简单”的 jQuery 解决方案(如果存在的话) ,但不介意其他的低级方法。我曾试图解析 $('#prod').attributes
,但由于缺乏 javascript-fu,这让我很失望。
Customdata 可以满足我的需要。然而,仅仅包含一个 jQuery 插件的一小部分功能似乎有些过分。
关注源代码帮助我修复了自己的代码(并改进了我的 javascript-fu)。
这是我想到的解决办法:
function getDataAttributes(node) {
var d = {},
re_dataAttr = /^data\-(.+)$/;
$.each(node.get(0).attributes, function(index, attr) {
if (re_dataAttr.test(attr.nodeName)) {
var key = attr.nodeName.match(re_dataAttr)[1];
d[key] = attr.nodeValue;
}
});
return d;
}
如已接受的答案所示,jQuery (> = 1.4.4)的解决方案很简单。