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() 对象在 $(.image).each() 的范围结束时被销毁:实际上,“image” var 是在该范围内创建的,并且在 .each() 结束后无法生存。

到目前为止,您只有 DOM 节点,但它已被 .remove() 删除。

你会感觉很舒服:P

于 2012-05-14T09:59:23.540 回答