我正在创建一个网站,通过AJAX加载新打开的页面。每个页面仅对该页面使用global.js和.js。问题是,当我加载新页面时,无论如何都会保留上一页的JavaScript。
我的AJAX:
$.post({
url: "./some_url",
dataType: 'html',
data: { ajax: true },
success: function(data) {
//Here I would need a way to stop all the previous JavaScript
$("#site").empty().append(data);
}
});
现在我正在寻找这种情况的最佳解决方案,因为在某些情况下,一个页面将运行javascript运行x(由此我的意思是一个函数将循环执行一些东西)所以我将不得不添加一些if语句来检查我是否还在正确的页面上。
所以问题是我应该如何解决它,是否有办法卸载一些javascript或者我应该将所有函数包装到一个对象中并使该对象为空?
还会删除通过javascript添加的已删除的html元素EventListeners,或者它们是否会实际停留在某处,直到我手动删除它们为止?
答案 0 :(得分:0)
好的AJAX用于处理后台请求,只是因为没有再次加载所有页面所以......你的逻辑似乎无效。
无论如何,您可以删除页面内的脚本或链接到js源:
<script id="mustBeRemoved">....</script>
或
然后使用jQuery:
$("#mustBeRemoved").remove();
或者使用简单的JS:
element.parentNode.removeChild(document.getElementById("mustBeRemoved"));
现在的事实是删除它? 只需在不再需要它时删除它(例如,在AJAX请求之前,或者只是在响应时,在加载其他内容之前)。
修改强> 加载脚本后,它定义的对象和函数将保留在内存中。删除脚本元素不会删除它定义的对象。这与CSS文件形成对比,其中删除元素会删除它定义的样式。那是因为新款式很容易回流。
但是,如果您有一个定义“myFunction”的文件,那么您添加另一个将myFunction重新定义为其他内容的脚本,将保留新值。如果你想保持DOM干净,你可以删除旧的脚本标签,但这一切都是删除它。
我能想到的唯一真实方式到“清理”功能是有一个JS文件基本上为每个可能的对象和函数调用delete window.myFunction,你的其他脚本文件可能会定义。出于显而易见的原因,这是一个非常糟糕的主意。
如果你可以在编码之前分析你需要的js,那么你可以避免这个问题。如果你的项目已经足够开发用于返回,那么最好的方法似乎是删除旧脚本或链接到旧脚本,并重新声明这些函数只是什么都不做(或做新的不同的事情)。