Sil*_*fer 5 javascript browser ajax jquery duplicates
我在AJAX导航时遇到问题,问题是加载的javascript文件即使在新内容加载后仍保留在浏览器中,即使它们DOM不再存在,它们也以VM文件形式显示在浏览器控制台中并在其中执行代码。我不希望发生这种情况,因为当新内容通过时应该替换的javascript文件AJAX。
我的DOM结构如下:
<body>
<header></header>
<main id="contentToBeReplaced">
<p>New content with its own js</p>
<script>
var script = "js/new.js";
$.getScript(script);
</script>
</main>
<footer></footer>
<script src="js/main.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
每当页面加载有其自己的javascript文件时,就会出现一个新VM文件并保留所有旧文件,这就是一个问题:

那么,问题出在哪里,我该如何解决呢?我需要防止重复文件,并在加载新的js文件时将其删除。
经过多次研究,我能够解决这个问题。据我所知,没有绝对的方法可以"unload"在不刷新页面或以编程方式清理内存浏览器缓存的情况下处理 JavaScript 文件。
\n由于这些动态 javascript 文件中的大部分代码都与事件函数相关,因此我document使用以下语法将事件绑定到而不是每个元素:
$(document).on("click", "#myElement", function () {\n\n});\nRun Code Online (Sandbox Code Playgroud)\n\n因此,每次加载 javascript 文件时,事件都会被一遍又一遍地绑定,并从VM files. 当你从 DOM 中删除一个元素时,他的绑定事件 it\xc2\xb4s 也会被删除,除非它像document我的那样绑定。所以我改变了on()将事件直接绑定到元素的方法:
$("#myElement").on("click", function() {\n\n});\nRun Code Online (Sandbox Code Playgroud)\n\n进行此更改后,我的问题消失了,因为我替换的 html 部分用AJAX其删除了该元素events,无需使用off()手动删除绑定事件,而且将在多个页面中执行的主要函数也应放置在主js中。
然而,@CharlieH在他的回答中提出了很好的观点。