Хранилище данных Jquery()

может ли кто-нибудь сказать мне, где jquery data() сохраняет данные и когда он стирается и как?

есть ли какие-либо проблемы с производительностью, если я использую это для хранения результата вызова ajax?

например:

$("body").data("test", { myData: 'abcd'});

2 ответов


см. содержимое из jquery

jQuery.метод data () позволяет присоединять данные любого типа к элементам DOM безопасным от циклических ссылок и, следовательно, без утечек памяти способом. jQuery гарантирует, что данные удаляются, когда элементы DOM удаляются с помощью методов jQuery и когда пользователь покидает страницу. Мы можем установить несколько различных значений для одного элемента и получить их позже:


все данные хранятся в собственность jQuery объект cache. Войти содержимое $.cache в консоли, чтобы увидеть все данные и события, связанные с любым элементом DOM.

способ jQuery связывает объект DOM с объектом в этом кэше, манипулируя объектом DOM. Скажем, у нас есть элемент ввода

<input type="text" value="hello" />

который имеет ключ данных с именем "foo"

$(e).data("foo", "bar");

теперь jQuery поддерживает случайную строку формы jQuery<current time in ms>, для пример,jQuery1291790929680, который также работает $.expando. jQuery добавляет эту строку expando в качестве ключа к каждому объекту DOM, который имеет связанный элемент данных или событие. Таким образом, объект DOM для вышеуказанного входного элемента будет содержать этот ключ expando с некоторым целочисленным значением, таким как:

jQuery1291790929680: 4

4 - это просто случайный пример, но это число обозначает индекс в $.cache object, где хранятся связанные данные и события для этого объекта DOM. Поэтому, учитывая эту информацию, чтобы получить данные вышеуказанного входного элемента мы можем косвенно записать:

$.cache[4]["foo"]

который должен вернуть "бар", который является косвенным способом написания $(e).data("foo").

An иллюстрированная выше бред :)