Вопрос по jquery, dom-manipulation, javascript – JQuery пустой () против удаления ()

95

В чем разница междуempty() а такжеremove()методы вjQueryи когда мы вызываем любой из этих методов, создаваемые объекты будут уничтожены, а память освобождена?

Ваш Ответ

3   ответа
2

$("body").empty() удаляет элементы HTML DOM внутри тега body

когда вы объявляете$("body").remove() - удалить весь HTML DOM вместе с тегом тела.

Что дает этот ответ, который отсутствует в существующих ответах, которые были здесь в течение трех лет? jcsanyi
152
empty() удалит все содержимое выбора.remove() удалит выделение и его содержимое.

Рассматривать:

<div>
    <p><strong>foo</strong></p>
</div>

$('p').empty();  // --> "<div><p></p></div>"

// whereas,
$('p').remove(); // --> "<div></div>"

Они оба удаляют объекты DOM и должны освободить память, которую они занимают, да.

Как насчет обработчиков событий? У меня есть странный случай, когда empty + append дважды, с разными добавлениями, заставляет второй набор добавленных элементов выполнять обработчики первого набора. Killroy
@ слишком поздно, но они также удаляют и обработчик. есть вероятность, что эти обработчики были зарегистрированы с помощью такой функции, какlive или жеdelegate. undone
52

Документация объясняет это очень хорошо. Он также содержит примеры:

.Удалить().empty ()

до:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

.Удалить():

$('.hello').remove();

после:

<div class="container">
  <div class="goodbye">Goodbye</div>
</div>

до:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

.empty ():

$('.hello').empty();

после:

<div class="container">
  <div class="hello"></div>
  <div class="goodbye">Goodbye</div>
</div>

Что касается памяти, то после удаления элемента из DOM и отсутствия ссылок на него сборщик мусора вернет память при запуске.

Отличный ответ ... Спасибо :) Bhupi
Идеальное резюме, это так хорошо объясняет! Для меня даже лучше, чем принятый ответ. JonSnow
пусто не будет касаться атрибутов селектора. Если вы хотите удалить атрибуты элемента селектора, я заметил, что в firefox jQuery removeAttr и removeClass содержат ошибки. Поэтому у меня была возможность использовать метод удаления и снова добавить элемент контейнера, а затем добавить к нему дочерние узлы. randominstanceOfLivingThing
аналогичным образом вы можете объяснить detach () также с соответствующими двумя выше .... Krish

Похожие вопросы