2

私の質問を説明する最良の方法は、そのような問題でいくつかの画像オブジェクトを作成することだと思います。

<div id="image_collection">
    <div class="image" data-src="http://image1.jpg"></div>
    <div class="image" data-src="http://image2.jpg"></div>
</div>

私のJavaScriptでは、次のことができます。

$('.image').each(function( index, element ){
    var image = new Image(); //NEW INSTANCE(S) CREATED (IN MEMORY)
    image.src = $(this).attr('data-src');
    $(this).parent().append(image);
});

これは私の実際のスクリプトの例でnew Image()あり、カスタムオブジェクトであることに注意してください。

このスクリプトは自動的に実行されるため、画像を配置<div class="image" data-src="http://image1.jpg"></div>する場所に画像が作成されます。現在、一部のプログラマーはこのスクリプトを使用してインポートし、次のコードを使用して独自のスクリプトを作成しています。

$('#image_collection').remove(); //OR 
$('#image_collection').html('Some new content');

これで、スクリプトが最初に起動し、すべての画像が変換されて新しいインスタンスが作成されますが、プログラマーがimage_collection内のノードを削除しても、それらの画像インスタンスは引き続きメモリに残ると思います。DOMで使用されなくなったイメージインスタンスを削除するにはどうすればよいですか?

4

3 に答える 3

2

この.remove()関数は、DOM からノードを削除して返します。戻り値で何もしていない場合、それらは最終的にクリーンアップされます。

于 2012-05-14T09:43:41.113 に答える
1

メモリが本当に心配な場合は、それらの画像をローカル変数に入れる代わりに、グローバル画像 (またはカスタム オブジェクト) 配列に入れることができます。グローバル変数を取る

var image_cleaned=false;

タイマー (つまり setTimeOut ) を使用して、din に class の img タグが含まれているかどうかを確認しimageます。一致する要素が見つからない場合 (および image_cleaned が false の場合)、その配列を削除します。次に設定しimage_cleaned=true;ます。次に、タイマーを削除します(オプションですが、より良い方法です)。

于 2012-05-14T09:52:38.267 に答える
1

$(.image).each() のスコープが終了すると、Image() オブジェクトは破棄されます。実際には、「image」var がそのスコープ内に作成され、.each() の終了後は存続できません。

これまでのところ、DOM ノードしかありませんが、.remove() によって削除されます。

快適に過ごせます :P

于 2012-05-14T09:59:23.540 に答える