Также должно быть предложено чистое решение JavaScript, поскольку решение не сложное:
var a = [].filter.call(el.attributes, function(at) { return /^data-/.test(at.name); });
Это дает массив объектов атрибутов, которые имеют свойства name
и value
:
if (a.length) {
var firstAttributeName = a[0].name;
var firstAttributeValue = a[0].value;
}
Редактировать: Чтобы продвинуться дальше, вы можете получить словарь, перебирая атрибуты и заполняя объект данных:
var data = {};
[].forEach.call(el.attributes, function(attr) {
if (/^data-/.test(attr.name)) {
var camelCaseName = attr.name.substr(5).replace(/-(.)/g, function ($0, $1) {
return $1.toUpperCase();
});
data[camelCaseName] = attr.value;
}
});
Затем вы можетеполучить доступ к значению, например, data-my-value="2"
как data.myValue
;
jsfiddle.net / 3KFYf / 33
Редактировать: ЕслиВы хотели установить атрибуты данных для вашего элемента программно из объекта, вы могли бы:
Object.keys(data).forEach(function(key) {
var attrName = "data-" + key.replace(/[A-Z]/g, function($0) {
return "-" + $0.toLowerCase();
});
el.setAttribute(attrName, data[key]);
});
jsfiddle.net / 3KFYf / 34
РЕДАКТИРОВАТЬ: Если вы используете babel или TypeScript или кодируете только для браузеров es6, это хорошее место, чтобы использовать функции стрелок es6 и немного сократить код:
var a = [].filter.call(el.attributes, at => /^data-/.test(at.name));