Хранилище данных 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 иллюстрированная выше бред :)