Учитывая произвольный элемент HTML с нулевыми или более атрибутами data-*
, как можно получить список пар ключ-значение для данных.
например. учитывая это:
<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;
}
update 2
Как показано в принятом ответе, решение тривиально с jQuery ( >= 1.4.4). $('#prod').data()
вернет требуемые данные dict.