jQuery empty () vs remove ()


99

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

Ответы:


160
  • empty() очистит выделение от его содержимого, но сохранит само выделение.
  • remove()очистит выделение от его содержимого и удалит само выделение.

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

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

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

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

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


Вот ссылки на документацию, которая также содержит примеры:


1
А как насчет обработчиков событий? У меня есть странный случай, когда пустой + добавляется дважды, с разными добавками, заставляет второй набор добавленных элементов выполнять обработчики первого набора.
Киллрой

1
@way слишком поздно, но они также удаляют обработчик. есть вероятность, что вы зарегистрировали эти обработчики с помощью функции типа liveили delegate.
отменено

55

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

перед:

<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 и больше нет ссылок на него, сборщик мусора освободит память при запуске.


empty не коснется атрибутов селектора. Если вы хотите удалить атрибуты элемента селектора, я заметил, что jQuery removeAttr и removeClass содержат ошибки в firefox. Таким образом, у меня был вариант использовать метод удаления и снова добавить элемент контейнера, а затем добавить к нему дочерние узлы.
randominstanceOfLivingThing

Прекрасное резюме, это так хорошо объясняет! Для меня даже лучше принятого ответа.
JonSnow,

2

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

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


17
Что дает этот ответ, чего не хватает в существующих ответах, которые были здесь в течение трех лет?
jcsanyi 03 авг.13,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.