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