Все данные хранятся в свойстве объекта 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 добавляет эту строку расширения в качестве ключа к каждому объекту DOM, с которым связан элемент данных или событие. Таким образом, объект DOM для указанного выше элемента ввода будет содержать этот ключ расширения с некоторым целочисленным значением, например:
jQuery1291790929680: 4
4 - это случайный пример, но это число обозначает индекс в объекте $.cache
, где хранятся связанные данные и события для этого объекта DOM. Таким образом, учитывая эту информацию, для извлечения данных из указанного выше элемента ввода мы можем косвенно написать:
$.cache[4]["foo"]
который должен возвращать "bar", что является косвенным способом записи $(e).data("foo")
.
иллюстрированный пример вышеуказанной ерунды:)