JQuery replaceWith()函数和内存中的事件处理程序

时间:2018-03-07 23:10:26

标签: javascript jquery memory

假设你有这个HTML代码:

<button id="click-me" type="button">Click Me!</button>

你运行这个jQuery片段:

var button = $('#click-me');

button.on('click', function() {
    console.log('Clicked !');
});

button.replaceWith('<button id="click-me" type="button">Click Me (Replaced)!</button>');

当然按钮什么也不做,因为它被另一个没有点击事件处理程序的按钮所取代,对吗?

我的问题是:点击事件处理程序是否仍然存在于内存中?或者,它是否被垃圾收集过程删除了?

1 个答案:

答案 0 :(得分:0)

  

click事件处理程序是否仍然存在于内存中的某个位置?或者,它是否被垃圾收集过程删除了?

不,事件再也没有被绑定,因为函数replaceWith删除了前一个元素button的完整DOM。

您可以使用事件委派将该事件“绑定”到元素#click-me

var button = $('#click-me');

$(document).on('click', '#click-me', function() {
    console.log('Clicked !');
});

button.replaceWith('<button id="click-me" type="button">Click Me (Replaced)!</button>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="click-me" type="button">Click Me!</button>