JavaScript:如何检测节点是否已被删除?
我认为描述我的问题的最好方法是在这样的事情中创建一些图像对象:JavaScript:如何检测节点是否已被删除?,javascript,jquery,memory,Javascript,Jquery,Memory,我认为描述我的问题的最好方法是在这样的事情中创建一些图像对象: <div id="image_collection"> <div class="image" data-src="http://image1.jpg"></div> <div class="image" data-src="http://image2.jpg"></div> </div> 请记住,这是我的真实脚本中的一个示例newimage()
<div id="image_collection">
<div class="image" data-src="http://image1.jpg"></div>
<div class="image" data-src="http://image2.jpg"></div>
</div>
请记住,这是我的真实脚本中的一个示例newimage()
是一个自定义对象
这个脚本是自动完成的,所以无论我把
放在哪里,都会创建一个图像。现在,一些程序员使用此脚本并将其导入,然后使用以下代码创建自己的脚本:
$('#image_collection').remove(); //OR
$('#image_collection').html('Some new content');
现在我的脚本首先启动,它将转换所有图像,创建新的实例,但当程序员删除图像集合中的节点时,我相信这些图像实例仍将保留在内存中。一旦这些映像实例不再在DOM中使用,我如何删除它们?函数
.remove()
从DOM中删除节点并返回它们。如果没有对返回值执行任何操作,它们最终会被清除。函数.remove()
从DOM中删除节点并返回它们。如果没有对返回值执行任何操作,它们最终会被清除。如果您真的担心内存问题,可以将这些图像放在全局图像(或自定义对象)数组中,而不是放在局部变量中。
取一个全局变量
var image\u=false代码>
使用定时器(即setTimeOut)检查din是否包含带有classimage
的img标签。
如果找不到任何匹配元素(并且image_cleaned为false),则删除该数组。然后设置image\u=true代码>。然后删除计时器(可选但更好)。如果您确实担心内存问题,可以将这些图像放在全局图像(或自定义对象)数组中,而不是放在局部变量中。
取一个全局变量
var image\u=false代码>
使用定时器(即setTimeOut)检查din是否包含带有classimage
的img标签。
如果找不到任何匹配元素(并且image_cleaned为false),则删除该数组。然后设置image\u=true代码>。然后删除计时器(可选但更好)。当$(.Image)的作用域结束时,Image()对象将被销毁。each()结束:实际上,“Image”变量是在该作用域中创建的,并且在.each()结束后无法继续存在
到目前为止,您只有DOM节点,但它已被.remove()删除
您可以放心:p当$(.Image)的作用域结束时,Image()对象被销毁。each()结束:实际上,“Image”变量是在该作用域中创建的,并且在.each()结束后无法继续存在
到目前为止,您只有DOM节点,但它已被.remove()删除
你会觉得舒服的:嗯,也许你是对的。如果没有引用,也没有在DOM中使用,为什么它仍然保留在内存中。也许我分析过度了。为什么不直接使用$(this).replacetwith(image)
?这将用图像替换
。如果您真的担心没有留下跟踪,请在追加的行之后执行以下操作:image=null代码>将打破循环并删除引用。换句话说,垃圾收集会更快地完成它的工作。你为什么要首先使用这种逻辑?马上把img标签粘贴到div容器中。嗯,也许你是对的。如果没有引用,也没有在DOM中使用,为什么它仍然保留在内存中。也许我分析过度了。为什么不直接使用$(this).replacetwith(image)
?这将用图像替换
。如果您真的担心没有留下跟踪,请在追加的行之后执行以下操作:image=null代码>将打破循环并删除引用。换句话说,垃圾收集会更快地完成它的工作。你为什么要首先使用这种逻辑?立即将img标签粘贴到div容器中。
$('#image_collection').remove(); //OR
$('#image_collection').html('Some new content');