2012-04-24 11 views
2

私は.empty()機能についてjQueryソースコードを見て:jqueryの空の関数が複雑なのはなぜですか?

empty: function() { 
     for (var i = 0, elem; (elem = this[i]) != null; i++) { 
       elem.innerHTML = ""; 
     }​ 

emptydocs

empty: function() { 
     for (var i = 0, elem; (elem = this[i]) != null; i++) { 
      // Remove element nodes and prevent memory leaks 
      if (elem.nodeType === 1) { 
       jQuery.cleanData(elem.getElementsByTagName("*")); 
      } 

      // Remove any remaining nodes 
      while (elem.firstChild) { 
       elem.removeChild(elem.firstChild); 
      } 
     }​ 

はそれだけで空の文字列にinnerHTMLを変更すると、多く簡単にできませんでした:

説明:一致する要素のセットのすべての子ノードを削除します。 DOM。

+0

このコメントでコードで説明されています: '//要素ノードを削除してメモリリークを防ぐ' ... – nnnnnn

+0

@nnnnnn。はい、私は実際にどのようにメモリリークを引き起こすことができるかを尋ねています... – gdoron

答えて

11

.data() expandosとイベントハンドラについて... DOMを削除するだけで、毎回メモリリークが発生します。

+0

また、jQuery UIと組み合わせると、要素の前に$ .widgetフレームワークを使って定義されたウィジェットの破壊メソッドで定義されたすべてのクリーンアップメソッドが呼び出されます削除されます。 –

+0

メモリリークについて正しく説明するために+1 ..難しい方法を学んだ –

+0

_ "expandos" _は何ですか? – gdoron

関連する問題