0個以上の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の欠如は私を失望させています。
更新
カスタムデータは必要なことを行います。ただし、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;
}
アップデート2
受け入れられた回答で示されているように、ソリューションはjQuery(> = 1.4.4)の場合は簡単です。$('#prod').data()
必要なデータ辞書を返します。