0

次のような HTML があるとします。

<tr id="myRow">
 <td > some text</td>
 <td > some text</td>
...
</tr>

そして、すべての TDがonClick イベントにハンドラーをアタッチしています。

#myRow の子を正しい方法で削除したいと思います。以下のコードはメモリリークを引き起こしますか?

query('#myRow').innerHtml = '';

すべての子 TD 要素を削除する適切な方法は何ですか?メモリ リークを引き起こさないのは?

ここで同様の質問が表示されます イベントが添付されている場合、DOMオブジェクトを削除すると(Javascriptで)メモリリークが発生しますか? しかし、要素を削除するとイベントハンドラーがクリアされるかどうかは不明です。

4

2 に答える 2

6

一般に、最新のブラウザは、DOM 要素を削除または置換するときにメモリ リークがないようにしようとします。そのため、イベント ハンドラーがメモリ リークを引き起こすことを心配することなく、 innerHtmlor 呼び出しを設定できるはずです。element.children.clear()

ただし、一般的に、複数の子要素に同じことを行うイベント ハンドラーを追加するシナリオは避けたいと考えています。多くの場合、イベント ハンドラーを親にアタッチし、targetおよびcurrentTargetプロパティを使用して、ハンドラーがアタッチされた要素とイベント ハンドラーをトリガーした要素を区別する方が効率的です。

于 2013-08-27T12:00:22.537 に答える
2

次のようにすべての要素を削除できます。

query("#myRow").children.clear();

これにより、ハンドラーなどの削除も処理されると思います。ドキュメントには、特にメモリの問題については何も書かれていません: https://www.dartlang.org/docs/tutorials/remove-elements/

于 2013-08-27T11:51:56.207 に答える