Какова цель функции jQuery cleanData?

Изучая исходный код jQuery, я несколько раз натыкался на функцию cleanData: ее вызывает jQuery.remove(). Так же и другие функции. Какова цель вызова cleanData перед удалением элемента DOM?

Является ли метод jQuery remove() лучше простого (удалить дочерний элемент), как в этой скрипке? И если да, то почему? Приводит ли этот код к утечкам памяти?

Какие данные очищаются перед удалением? Есть ли какой-либо вариант использования вне jQuery?


person Thomas Junk    schedule 05.09.2013    source источник
comment
Спасибо, что пометили этот вопрос как дубликат, особенно когда в упомянутом ответе отсутствуют технические детали, заданные здесь.   -  person Thomas Junk    schedule 06.09.2013


Ответы (1)


Для элементов, которые получают обработчики событий, данные или выполняют некоторые другие операции из методов jQuery, jQuery создаст запись в jQuery.cache для этого элемента.

Сам элемент получает свойство, которое содержит ключ к его записи в jQuery.cache. Это единственное, что связывает элемент и данные.

Поэтому, когда элемент будет удален, jQuery необходимо найти запись в jQuery.cache с помощью ключа, найденного в элементе, а затем уничтожить связанные данные. Если бы этого не было сделано, произошла бы утечка памяти, так как после исчезновения элемента нет способа узнать, что данные jQuery.cache следует удалить.

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

person user2736012    schedule 05.09.2013
comment
Итак, если я вас правильно понимаю, в этом нет необходимости за пределами jQuery. - person Thomas Junk; 06.09.2013
comment
да. Как правило, недокументированные функции являются такими не просто так. - person Blazemonger; 06.09.2013
comment
@ Lilith2k3: Да, его вообще не нужно использовать. Он используется внутри, когда это необходимо. - person user2736012; 06.09.2013