В HTML5 введены пользовательские атрибуты данных с префиксом
data-. Они позволяют хранить произвольную информацию в
элементах DOM без нарушения семантики HTML. В JavaScript доступ к этим
данным можно получать через стандартное свойство dataset, а
Umbrella JS предоставляет для этого удобные методы с лаконичным
синтаксисом.
Метод .data() является основным способом работы с
атрибутами data-* в Umbrella JS. Если вызвать его без
аргументов, возвращается объект всех пользовательских данных
элемента:
u('.item').data();
Если элемент содержит:
<div class="item" data-id="42" data-role="admin"></div>
Выражение выше вернёт объект:
{ id: "42", role: "admin" }
Можно получить конкретное значение, передав имя атрибута в
.data():
let role = u('.item').data('role'); // "admin"
Umbrella JS автоматически преобразует имена атрибутов из
kebab-case в camelCase. Например:
<div data-user-id="101"></div>
u('div').data('userId'); // "101"
Метод .data(key, value) позволяет записывать данные в
элемент. Если элемент уже содержит атрибут data-*, значение
обновляется; если нет — создаётся новый атрибут.
u('.item').data('status', 'active');
Результатом в HTML будет:
<div class="item" data-id="42" data-role="admin" data-status="active"></div>
Можно передавать объект для массовой установки:
u('.item').data({
level: 5,
group: 'users'
});
Umbrella JS добавит соответствующие data-* атрибуты:
<div class="item" data-id="42" data-role="admin" data-status="active" data-level="5" data-group="users"></div>
Удаление атрибутов данных осуществляется методом
.removeData() с указанием имени:
u('.item').removeData('status');
Если вызвать без аргументов, будут удалены все пользовательские
атрибуты data-*:
u('.item').removeData();
Umbrella JS хранит данные в памяти, а не только в DOM. При работе с объектами или массивами важно помнить:
.data() не изменяет исходный
атрибут data-*, пока не вызвать
.data(key, value) с конкретным ключом..data() возвращается уже “живой”
объект, который можно изменять напрямую.Пример:
u('.item').data('config', { theme: 'dark', fontSize: 14 });
let config = u('.item').data('config');
config.theme = 'light';
// Чтобы сохранить в DOM:
u('.item').data('config', config);
Данные, хранящиеся через .data(), удобно использовать
вместе с событиями Umbrella JS:
u('.btn').on('click', function() {
let action = u(this).data('action');
console.log('Выполняется действие:', action);
});
Если HTML содержит:
<button class="btn" data-action="save">Сохранить</button>
При клике в консоль выведется:
Выполняется действие: save
Такой подход упрощает хранение состояния и параметров без глобальных переменных.
attr('data-*')Umbrella JS позволяет также использовать стандартные методы
.attr('data-*') для чтения и записи. Основные различия:
| Метод | Тип данных | Автоматическое преобразование имен | Поддержка объектов/массивов |
|---|---|---|---|
.data() |
JS-значения (string, number, объект) | Да, kebab-case → camelCase |
Да |
.attr('data-*') |
Всегда строка | Нет | Нет, только JSON вручную |
Использование .data() делает код более чистым и удобным
для работы с структурированными данными.
.data() для хранения состояния UI,
параметров конфигурации и идентификаторов элементов..data(key, value)..data({...}) вместо множественных вызовов..removeData() для
освобождения памяти, особенно в динамических интерфейсах.Использование атрибутов data-* в сочетании с методами
Umbrella JS обеспечивает легкий и структурированный доступ к
пользовательским данным, упрощает код и делает взаимодействие с DOM
более предсказуемым и безопасным.