Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Prototype JS中干净地删除DOM元素?_Javascript_Memory Leaks_Prototypejs - Fatal编程技术网

Javascript 如何在Prototype JS中干净地删除DOM元素?

Javascript 如何在Prototype JS中干净地删除DOM元素?,javascript,memory-leaks,prototypejs,Javascript,Memory Leaks,Prototypejs,假设我有一个里面有各种元素的容器。反过来,任何元素都可以有各种事件侦听器 <div id="container"> <video src="movie.mp4"></video> <a>Some button</a> </div> 以下是清理容器的快捷方法: $('container').update(); 但它会导致内存泄漏吗?大多数javascript引擎会明白,如果我清除innerHTML,我还想清除每

假设我有一个里面有各种元素的容器。反过来,任何元素都可以有各种事件侦听器

<div id="container">
   <video src="movie.mp4"></video>
   <a>Some button</a>
</div>
以下是清理容器的快捷方法:

$('container').update();

但它会导致内存泄漏吗?大多数javascript引擎会明白,如果我清除innerHTML,我还想清除每个元素上的事件侦听器吗?

通常,当元素消失时,事件处理程序就会消失。清除容器的
innerHTML
将销毁所有包含的元素,从而销毁附加的事件处理程序


旧版本的Internet Explorer(如果您将定期在一个稳定的容器中添加和删除元素,那么如果改用它,可能会节省时间和内存问题


这样,不管元素是什么,事件处理程序都是持久的,并且不会创建新的处理程序,因此不会提供任何泄漏。

这对Prototype有效。谢谢Tomalak。我花了几个小时对代码进行故障排除,但这解决了我的问题。@MisterBigs感谢您的反馈!
$('container').update();
Element.addMethods({
    clear: function(element) {
        element = $(element);

        element.descendants().each(function(elem) {
            Event.stopObserving(elem);
        });

        return element.update();
    }
});
$('container').clear();
$('container').on('click', 'a', function() {
    // button is clicked
});