Skip to main content
 首页 » 编程设计

jquery之在元素上使用 jQuery .data() 然后通过直接 DOM 操作删除该元素是否会泄漏内存

2026年03月25日1546pengyingh

我正在开发一个使用 Prototype 编写的网站,但我们正在将其逐步转向 jQuery。很多页面更新都是通过Prototype 的Ajax.Updater 完成的。然而,有时 Prototype 删除和替换的元素已经在其上运行了 jQuery 小部件,因此 $.cache 引用了该小部件创建的其他元素。由于 jQuery 没有执行 DOM 删除操作,因此在删除这些元素时,它没有机会从 $.cache 中清除这些元素的数据,最终导致内存泄漏。有没有办法告诉 jQuery 检查它的 $.cache 并丢弃不再在 DOM 中的元素的任何数据?

请您参考如下方法:

听起来有点棘手 - 特别是因为 Ajax.Updater 是 Ajax.Request 的特化,它没有有 onsuccess/oncomplete 回调,这意味着您可能必须定期检查缓存等。这听起来比创建 jQuery“更新程序”要更多的工作。

如果您愿意用 jQuery 重写来替换更新程序,这个问题就会完全消失,并且肯定比解决它更简单。 jQuery 中的简单“更新程序”如下。

function update() { 
    $.ajax({ 
        type: 'get', 
        url: 'theContent.html', 
        success: function(text) { 
            // .html calls '.cleanData()' internally. No need to do anything else. 
            $('#updateMe').html(text); 
        } 
    }); 
} 
 
var i = setInterval(update, 5000);