Data-атрибуты представляют собой специальный способ
хранения пользовательских данных непосредственно в HTML-элементах. Они
позволяют связывать произвольную информацию с DOM-узлами без
необходимости вмешательства в структуру документа или использование
глобальных переменных. В Zepto.js работа с data-атрибутами реализована
через удобные методы .data() и .removeData(),
которые упрощают чтение, запись и удаление данных.
.data()Метод .data() позволяет получать значения data-атрибутов
элементов. Data-атрибуты в HTML записываются с префиксом
data-, например:
<div id="item" data-id="42" data-name="sample"></div>
Чтобы получить значение атрибута data-id, используется
следующий синтаксис:
var id = $('#item').data('id'); // 42
var name = $('#item').data('name'); // "sample"
Особенности чтения:
"true" → true,
"42" → 42.undefined..data()Метод .data() также поддерживает запись данных.
Существует два способа:
$('#item').data('category', 'books');
console.log($('#item').data('category')); // "books"
$('#item').data({
author: 'John Doe',
year: 2026
});
console.log($('#item').data('author')); // "John Doe"
console.log($('#item').data('year')); // 2026
Особенности записи:
.data() Zepto сохраняет
их в собственном внутреннем кэше, не изменяя напрямую HTML-атрибут
data-*. Это обеспечивает быстрый доступ и предотвращает
постоянные операции над DOM..attr('data-*', value), но чаще достаточно работы через
.data()..removeData()Метод .removeData() позволяет удалять данные, ранее
добавленные через .data():
$('#item').removeData('category');
console.log($('#item').data('category')); // undefined
Можно удалить сразу несколько значений, передав массив ключей:
$('#item').removeData(['author', 'year']);
Data-атрибуты в HTML используют дефисы (data-user-id), а
в JavaScript при работе через .data() применяются
верблюжный стиль (userId):
<div id="user" data-user-id="101" data-user-name="Alice"></div>
var userId = $('#user').data('userId'); // 101
var userName = $('#user').data('userName'); // "Alice"
Zepto автоматически конвертирует имена атрибутов при доступе, что позволяет избегать ошибок при взаимодействии с DOM.
Методы .data() и .removeData() применяются
к набору элементов. При чтении значения возвращается из первого элемента
коллекции, при записи данные добавляются ко всем выбранным
элементам:
<div class="item" data-count="1"></div>
<div class="item" data-count="2"></div>
$('.item').data('active', true); // добавляет всем элементам data-active = true
console.log($('.item').eq(0).data('active')); // true
console.log($('.item').eq(1).data('active')); // true
Zepto позволяет также работать напрямую с HTML-атрибутами
data-* через метод .attr(). Разница между
.attr() и .data():
.attr('data-*') читает/записывает значение напрямую в
HTML..data() использует внутренний кэш, что быстрее и
безопаснее для сложных данных (объектов, массивов).Пример:
$('#item').attr('data-role', 'admin');
console.log($('#item').data('role')); // "admin"
$('#item').data('role', 'editor');
console.log($('#item').attr('data-role')); // "admin" — HTML не изменился
Для обновления HTML через .data() необходимо явно
использовать .attr():
$('#item').attr('data-role', $('#item').data('role'));
.data() для временного хранения объектов и
состояния элементов..attr('data-*') для значений, которые
должны быть видимы в HTML и доступны без JavaScript.Часто значения из data-атрибутов используются в обработчиках событий. Например:
$('.btn').on('click', function() {
var action = $(this).data('action');
if (action === 'delete') {
$(this).closest('.item').remove();
}
});
Это позволяет создавать гибкие, настраиваемые элементы интерфейса, где поведение определяется данными, а не жестко прописанным кодом.
.data() для чтения и записи данных с внутренним
кэшем..removeData() для удаления данных..data() и .attr('data-*')
заключается в хранении данных в памяти и прямой записи в HTML
соответственно.