jQuery предоставляет мощный механизм для хранения и извлечения
данных, связанного с элементами DOM, через методы .data() и
.removeData(). Эти методы позволяют безопасно ассоциировать
произвольные объекты JavaScript с элементами без прямого изменения их
атрибутов или структуры HTML.
.data()Метод .data() используется для присвоения данных
элементу или извлечения уже существующих. Основные формы его
использования:
// Присвоение одного значения
$('#element').data('ключ', 'значение');
// Присвоение нескольких значений через объект
$('#element').data({
имя: 'Иван',
возраст: 30
});
// Чтение данных
var имя = $('#element').data('имя'); // "Иван"
Ключевые особенности:
data-*.data-*
атрибутов: при первом обращении к .data('ключ'),
если данные отсутствуют в памяти, jQuery ищет соответствующий
data-ключ в HTML и конвертирует его в JavaScript-тип.<div id="user" data-name="Anna" data-age="25"></div>
var name = $('#user').data('name'); // "Anna" (строка)
var age = $('#user').data('age'); // 25 (число)
data-* атрибуту значение сохраняется в внутреннем кэше
jQuery, что делает последующие обращения более быстрыми.Метод .data() позволяет хранить любые объекты
JavaScript, включая массивы, функции, объекты и даже DOM-элементы.
var settings = {
theme: 'dark',
layout: 'grid'
};
$('#container').data('settings', settings);
// Извлечение и модификация
var containerSettings = $('#container').data('settings');
containerSettings.theme = 'light';
Данные остаются связанными с конкретным элементом, пока страница не
будет перезагружена или данные явно не удалены через
.removeData().
Для освобождения памяти или удаления устаревшей информации
используется метод .removeData():
$('#element').removeData('ключ'); // Удаляет одно значение
$('#element').removeData(); // Удаляет все данные, связанные с элементом
Удаление данных не затрагивает HTML-атрибуты data-*, но
освобождает внутренний кэш jQuery.
.data() и data-* атрибутами.data() работает в памяти и быстрее, особенно при
частом обращении к данным.data-* атрибуты являются частью HTML и могут быть
прочитаны без JavaScript.data-* атрибута через jQuery
(.attr('data-ключ', значение)) не обновляет кэш
.data() автоматически. Для синхронизации необходимо
использовать .data('ключ', значение).$('#element').attr('data-count', 10); // изменяет атрибут
var count = $('#element').data('count'); // может вернуть старое значение из кэша
$('#element').data('count', 10); // обновляет кэш и атрибут
.data() особенно полезен при работе с динамическими
элементами интерфейса:
$('#button').on('click', function() {
var clicks = $(this).data('clicks') || 0;
clicks++;
$(this).data('clicks', clicks);
console.log('Количество кликов:', clicks);
});
.data() для хранения информации, которая
нужна только в рамках JavaScript.data-* атрибуты..attr('data-ключ') и .data('ключ'), чтобы не
возникало несоответствия между кэшем и HTML.Методы .data() и .removeData() обеспечивают
гибкое и эффективное хранение данных, позволяя создавать динамичные,
интерактивные приложения без загрязнения HTML и глобального пространства
имён. Их использование упрощает управление состоянием элементов и
повышает читаемость кода.