jQuery empty()と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
イベントハンドラについてはどうですか?empty + appendが2度奇妙なケースで、別のアペンドを使用すると、2番目のアペンドアイテムセットが最初のセットのハンドラーを実行します。
Killroy、2015年

1
@wayは遅すぎますが、ハンドラーも削除されます。liveまたはのような関数でハンドラーを登録した可能性がありますdelegate
2017

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>

。空の():

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

後:

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

メモリに関する限り、要素がDOMから削除され、それへの参照がなくなると、ガベージコレクターは実行時にメモリを再利用します。


emptyはセレクターの属性には影響しません。セレクター要素の属性を削除したい場合、FirefoxではjQueryのremoveAttrとremoveClassにバグがあることに気付きました。したがって、私が持っていたオプションは、removeメソッドを使用してコンテナー要素を再度追加してから、それに子ノードを追加することでした。
randominstanceOfLivingThing 2013

完璧な要約、これはそれをとてもよく説明しています!私にとっては、受け入れられた答えよりも優れています。
JonSnow

2

$("body").empty() -bodyタグ内のHTML DOM要素を削除します-

宣言 $("body").remove() すると、HTML DOM全体と本体TAGが削除されます。


17
この回答は、3年間ここにいる既存の回答に欠けているものを提供していますか?
jcsanyi 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.