2011-11-14 1 views
9

子要素が多い要素があります。私はこの要素の内容をクリアし、それを新しい構造に置き換えたいと思います。jquery empty()メソッドは、jquery以外の手段で作成されたイベントリスナーをクリアします

子要素にはさまざまなイベントリスナーが割り当てられていますが、これらのリスナーはすべてjquery bindメソッドで作成されるわけではありません。

jqueryの空のメソッドを使用して要素を消去すると、すべてのイベントリスナーが削除されるか、jquery bindメソッドを使用して作成されたリスナーのみが消去されますか?

答えて

0

イベントリスナーはクリアされません。しかし、このイベントリスナーをlive()イベントとして使用する必要があります。DOM要素を動的に変更するためです。

$('a').live('click', function(){ 
    // your stuff 
}); 

// jQueryの1.7は、コードスニペット

$(document).on('click', 'a', function(){ 
    // your stuff 
}); 
+4

この回答はドキュメントと矛盾します:http://api.jquery.com/empty/ "メモリリークを避けるために、jQueryは要素自体を削除する前に、子要素からデータやイベントハンドラなどの他の構造体を削除します。 Ifデータやイベントハンドラを破壊することなく要素を削除したいので(後で再追加できるように)、代わりに.detach()を使用します。 – umassthrower

3

を以下のために必要なあなたは)(.unbindとオブジェクトのすべてのリスナーをバインド解除とのparamsを残すことができます:例えばのための

空の

要素のすべての子を削除する場合。ちょうどユーザ$( "#parent")。children()。remove(); ライブ()ダイと

()あなたはまだ、まだ存在していない要素にのEventHandlerを追加することができ方法。 $( "。element")。live( "click"、function(){})は、HTMLに現在ある、または将来追加されるすべての.elementオブジェクトに関数を追加します。

+7

Jqueryのempty()ドキュメントにはこれが記載されています。 「メモリリークを避けるために、jQueryは、要素自体を削除する前に、子要素からデータやイベントハンドラなどの他の構造を削除します。 empty()メソッドを呼び出してはいけませんか?なぜ私はバインドを解除する必要がありますか? – Mandai

+2

はい、実際には.empty()は、すべてのものをその子によって、それぞれの子に行います。 .empty()を使用している場合は.ubind()を自分で呼び出す必要はありません。イベントをバインド解除し、ノード内に保存されているすべてのデータを消去します。 – Niels

12

いくつかのコメンターが述べたように、jQueryのドキュメントは、()空が実際にイベントハンドラを削除しないことを言う:この質問が投稿されたときにhttp://api.jquery.com/empty/

はおそらくそうではありませんでしたが、このページは、上の最初のヒットでありますGoogle。

+0

ちょうどこれを経験し、jQuery 1.12 'empty()'は実際にリスナーを削除します。 – Risadinha

関連する問題