Может ли кто-нибудь объяснить, почему содержимое элемента все еще отображается после удаления

#jquery

Вопрос:

Я могу показаться новичком, но для меня это довольно удивительно, и мне нужно знать, что происходит на самом деле.

Я сделал это:

 var elem=$('#div');
 elem.remove();
alert(elem.text());
 

Удивительно, но я все еще получаю предупреждение о содержимом элемента.

Где как, если я сделаю это

 var elem=$('#div');
 elem.remove();
alert( $('#div').text()); //undifined
 

Комментарии:

1. Вы все еще можете повторно добавить элемент в другое место в DOM; он не исчезнет навсегда, как только вы .remove() его создадите.

2. @AKX.. Довольно интересно это знать… Если я правильно понимаю, это означает простое наличие или объявление переменной elem=$(‘#div’); уже содержит или сохраняет содержимое и данные элемента еще до использования elem.text()?

3. Да, $() будут выбраны элементы из DOM, и у вас будут ссылки на них.

4. Большое спасибо..

Ответ №1:

В вашем первом примере вы удаляете элемент из DOM, но в вашей переменной все еще есть ссылка на него, о которой вы затем предупреждаете, что это текст.

Во втором примере вы снова удаляете элемент из DOM, а затем снова выполняете поиск в DOM элемента с идентификатором div, который не найден, возвращая, таким образом, неопределенный, когда его текст предупрежден.

Комментарии:

1. Весьма интересно это знать… Если я правильно понимаю, это означает простое наличие или объявление переменной elem=$(‘#div’); уже содержит или сохраняет содержимое и данные элемента еще до использования elem.text()?

2. Кроме того, нужно ли будет сделать elem=null;, чтобы очистить его из памяти?

3. Да, когда вы назначаете объект jQuery элемента DOM (или также собственный объект элемента DOM), у вас будет доступ ко всем его текущим свойствам. И, если вы хотите помочь в сборе мусора, вы можете установить для него значение null, если он больше не используется 😉