Методы .data() и .removeData()
Определение и применение
Метод .data() связывает с DOM-элементом данные JavaScript, например состояние раскрытой карточки. Метод
.removeData() удаляет эти значения из хранилища jQuery. Данные могут быть объектами и числами: превращать
их в строки HTML-атрибутов не требуется.
Синтаксис
collection.data(key, value);
collection.data({ key: value });
collection.data(key);
collection.data();
collection.removeData(key);
collection.removeData(["first", "second"]);
collection.removeData();Параметры и возвращаемое значение
key — строковое имя. Запись выполняется для всех элементов и возвращает исходную коллекцию. Чтение по
имени возвращает значение первого элемента или undefined; вызов без аргументов возвращает объект его
данных. .removeData() возвращает коллекцию; без аргумента удаляет все пользовательские данные, со строкой
или массивом — выбранные ключи.
.data(object) поверхностно дополняет данные: вложенные объекты не объединяются рекурсивно.
undefined не сохраняется как значение. Имена вида user-name нормализуются в
userName.
При первом чтении значения jQuery может получить его из data-*. Строки true,
false, null, подходящие числовые строки и корректные JSON-объекты/массивы преобразуются в
значения JavaScript. Строка "010" остаётся строкой, чтобы не потерять её запись. Затем
используется кеш: изменение атрибута не обновляет уже прочитанное значение.
Особенности и совместимость
Запись через .data() не меняет атрибут. Для HTML-атрибутов используйте
.attr(), для удаления атрибута —
.removeAttr(). После .removeData("count") следующий вызов .data("count") может снова
прочитать сохранившийся data-count. Повторный массовый вызов .data() не сканирует все
атрибуты заново.
В 4.0 объект данных не следует проверять его собственным методом hasOwnProperty: используйте
Object.hasOwn(data, key). Для жизни данных только в JavaScript также подходит WeakMap; это
отдельное хранилище, не связанное с кешем jQuery.
Документация
Пример использования
Кеш данных и HTML-атрибут: попробуйте сами
Прочитайте исходное значение, измените атрибут и сравните чтение до и после удаления кеша. Результат: 2, 2, 5. Используется jQuery 4.0.0.
index.html
<div id="card" data-count="2">Карточка</div>
<pre id="result"></pre>
main.js
const card = $('#card')
const before = card.data('count')
card.attr('data-count', '5')
const cached = card.data('count')
card.removeData('count')
$('#result').text([before, cached, card.data('count')].join(', '))
Нажмите , чтобы запустить пример.