给定具有零个或多个data-*属性的任意HTML元素,如何检索数据的键值对列表.
如上:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
Run Code Online (Sandbox Code Playgroud)
我希望能够以编程方式检索此:
{ "id":10, "cat":"toy", "cid":42 }
Run Code Online (Sandbox Code Playgroud)
使用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;
}
Run Code Online (Sandbox Code Playgroud)
正如在接受的答案中所证明的那样,使用jQuery(> = 1.4.4)解决方案是微不足道的.$('#prod').data()将返回所需的数据字典.
可能重复:
JavaScript setAttribute vs .attribute =
javascript dom,如何处理"特殊属性"作为属性?
很多时候,在Usenet的论坛或地方,我被一些人(当批评我的代码时)告诉我,而不是说,例如var link = a.href我应该使用var link = a.getAttribute('href');.并且在想要分配时使用其互补的setAttribute().
他们说这是正确的做法,我错了,等等等等......我通常不会注意那些.当我问为什么没有人给出真正的答案时.
现在我很好奇在哪些情况下更适合使用其中一种或另一种.
在什么情况下更适合说var link = a.getAttribute('href');而不是var link = a.href?
在什么情况下,我使用setAttribute()来分配,而不是直接通过其标识符为成员赋值?即:`a.href ='someURL';