2012-04-04 3 views
2

Я назначаю некоторые данные html-объектам с помощью jquery, который я создаю, дело в том, что когда я вызываю метод из плагина, данные, которые я назначил, больше не находятся в объекте.Как долго данные jquery, присвоенные данными() живут?

+0

можете ли вы отправить код? – Joseph

+0

Данные хранятся в плагине, есть кнопка, которая вызывает событие в файле plugn, но когда я делаю это все данные, которые были до этого, его неопределенный – Johangsl

+0

вы можете опубликовать код плагина? – Joseph

ответ

5

Это полезно, чтобы понять, как работает .data(), чтобы понять, как долго жизнь данных. Когда вы храните что-то с .data(), он переходит во внутреннюю структуру данных javascript в jQuery. Таким образом, в этом отношении это всего лишь переменная javsacript, и она живет так долго, как и любая другая переменная javascript.

Это означает, что после того, как вы покинете страницу, она полностью исчезла - как и все другие переменные javascript.

Другим способом удаления данных может быть, если какой-либо код javascript специально удалил данные из структуры данных. Обычно это произойдет, если вы используете метод jQuery, который намеренно удаляет объект DOM. Это можно сделать с помощью $(elem).remove() или с помощью $(elem).html("some html) и любых других методов jQuery, которые удаляют элементы из DOM. Поскольку эти методы удаляют объекты из DOM, jQuery «очищает» информацию .data(), связанную с этими элементами. Единственным исключением является .detach(), который удаляет элемент из DOM, но не удаляет его .data(). Это делается специально, чтобы вы могли удалить его из DOM, но сохраните его состояние, предположительно, чтобы его можно было вернуть в DOM где-то еще или через некоторое время.

Примечание: если вы удалите DOM элемент из DOM без использования функции JQuery (например .removeChild() или путем присвоения .innerHTML), JQuery не будет знать, что вы удалили эти элементы DOM, и информация .data() не будет очищена вверх - это будет просто просто тратить пространство в памяти. Это не наносит никакого вреда, кроме потребления некоторой дополнительной памяти. Если информация .data() содержит ссылки на другие элементы javascript или DOM, это может привести к еще большему утечке памяти.

Если вы используете .data(), он создает один случай, когда вы хотите придерживаться методов jQuery для всего, что может привести к удалению элементов DOM.Обычно с jQuery вы можете смешивать/сопоставлять простые javascript и jQuery, но это один случай, когда вы не должны.

+0

выпуск решен спасибо !! – Johangsl

1

данные, используя .data() жизнь до тех пор, как:

  • Jquery по-прежнему на вашей странице. jQuery использует internal cache для данных, используя .data(). Это никогда не было в DOM.

  • до тех пор, как элемент, который вы связаны данные по-прежнему вокруг или удалены в DOM, она была удалена .detach()

  • вы не перезагрузите страницу. данные, хранящиеся в .data(), не сохраняются при перезагрузке страниц.

+0

Данные хранятся в плагине, есть кнопка, которая вызывает событие в файле плагина, но когда я делаю это все данные, которые были до этого, его неопределенная – Johangsl

+0

проблема решена благодаря! – Johangsl

1

Из jQuery.data() документации:

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

Смежные вопросы