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()。 一切都在继续。
以下是一些提示:
- 不要在每次ajax调用时重新包含脚本。
- 如果您有需要处理的事件,请使用jQuery.live()
- 只设置一次定时器,而不是每次调用ajax。
听起来你正在构建单页面web应用程序,你可能希望使用像backbone.js这样的东西来组织代码并帮助你遵循一些更好的模式。 看看这个教程:
http://addyosmani.com/blog/building-spas-jquerys-best-friends/
祝你好运
也许你删除了进度条跨度? 此外,您可以考虑使用$ .deferred – > .done