jQuery clear DOM以前加载的脚本

美好的一天,我正在开发一个项目,我使用jQuery将页面加载到div中,每个页面都有自己的jQuery脚本,我的问题是以前加载的脚本没有从DOM中清除,这给我的项目带来了更大的问题。

例如,我在一个页面中有一组定时器,它自动保存数据,但是当我更改页面时,定时器仍在运行并弄乱内容。

我管理这样的更改页面:

$(document).ready(function() { $('li').click(function (event) { $('.progressbarone').hide(); var theitem = this.id; //isf ajax to load with addon var thefile = "isf_ajax.php?addon="+this.id; var progress = ''; // pre actions $('.'+ theitem +'_item') .append(progress) .children(':last') .hide() .fadeIn(1000); $('li').removeClass('active'); $(this).addClass('active'); // load the page $('#childpage').remove(); $('#officetable').html('
loading
'); $('#childpage').load(thefile, function() { // after load actions $('.progressbarone').fadeOut(2000); }); }); });

正如您所看到的,我有两个div,一个称为office表,用于处理子页面,childpage具有已更改页面的内容。 但是你可以看到我使用了remove(); function以及之后,我将childpage放置在officetable并发布文件的内容,但它仍然没有删除我以前加载的脚本。

感谢你们。

将脚本附加到页面后,即可运行这些脚本。 虽然从DOM中删除了脚本标记,但变量仍将保留。 我的意思是定时器,函数,代码中声明的任何变量。

所以你可能想要清除以前不再需要的状态。

 function doTheCleanup(){ clearTimeout(globalTimerVariable); delete someGloablVar; //and so on } 

如果您的脚本已经执行了删除DOM元素,则不会删除它们。 使用JavaScript转到任何页面,打开firebug或console并输入$(“script”)。remove()。 一切都在继续。

以下是一些提示:

  1. 不要在每次ajax调用时重新包含脚本。
  2. 如果您有需要处理的事件,请使用jQuery.live()
  3. 只设置一次定时器,而不是每次调用ajax。

听起来你正在构建单页面web应用程序,你可能希望使用像backbone.js这样的东西来组织代码并帮助你遵循一些更好的模式。 看看这个教程:

http://addyosmani.com/blog/building-spas-jquerys-best-friends/

祝你好运

也许你删除了进度条跨度? 此外,您可以考虑使用$ .deferred – > .done