如何删除使用AJAX动态加载的JavaScript

如何删除使用AJAX动态加载的JavaScript,javascript,jquery,Javascript,Jquery,简而言之: 我在文档中的不同位置有多个JavaScript部分。其中一些是通过AJAX加载和评估的: <script id="js5533" type="text/javascript"> javascript and jquery stuff (lots) </script> <script id="js7711" type="text/javascript"> javascript and jquery stuff (lots) </scri

简而言之:

我在文档中的不同位置有多个JavaScript部分。其中一些是通过AJAX加载和评估的:

<script id="js5533" type="text/javascript">
  javascript and jquery stuff (lots)
</script>
<script id="js7711" type="text/javascript">
  javascript and jquery stuff (lots)
</script>
当然,这个函数只从文档中删除元素,并且js7711节中的所有JavaScript函数仍在工作

我不想通过像a()这样的操作手动删除节中的每个函数和变量;a=0

有没有更少的编码解决方案

谢谢

还使用了p.S.jQuery

有没有更少的编码解决方案

没有。


你最好再想一想,如果这真的是最好的方法,我的意思是摆脱javascript脚本

尽管我觉得这个问题真的很奇怪,但我还是会尽量不深入,只回答一个问题。 将导入的脚本重写为类似以下内容:

window.js7711 = function() {
// javascript and jquery stuff (lots)
}
然后,当您加载这个笨拙的东西时,您应该执行它
js7711()

在删除时,我假设您会执行以下操作:

var myID=“js7711”

$(“#”+myID).remove()

添加以下内容:

删除窗口[myID]

如果在这个导入的脚本中声明函数,您应该考虑添加一个带有导入函数名的数组
js7711.imported=[“something”,“trololo”]
,然后在循环中删除它们


无论如何,我认为您的方法/结构有点混乱。

问题确实是,如果您将任何事件绑定到了#js7711之外的元素,这些元素仍然会调用,即javascript函数仍然有效

想到的解决方案是生成JS函数,检查它们的“根”元素(即#js7711)是否仍然存在,并仅在仍然可以找到该元素时执行


然后,如果您删除#js7711,JS函数将停止工作,这可能是您想要的

为此找到了一个懒惰的解决方法

首先:摆脱以前的JS代码的原因是——在不重新加载页面的情况下运行新代码(与旧代码类似或相同)

解决办法是: 忘记以前加载的代码,使用
jQuery.globalEval(js)执行新代码其中js是包含实际新js代码的var

jQuery只是用新代码创建了另一个序列,该序列不会干扰除实时事件之外的旧序列(使用event.stopPropagation()解决)

这对我很有用


就像有人说的:你不能让浏览器忘记已经执行的JS。

你有什么样的代码?你为什么要摆脱它?你想用它实现什么?只有在你控制服务于ajax内容的服务器端代码时,你才能实现你想要实现的。否则,除非您确切地知道javascript文件中每个函数的名称,否则无法对javascript文件中的内容进行非标准化them@Sergio图兰采夫:不同。jQuery动画,普通JavaScript,随便什么。@AndréAlçada Padez:我当然控制服务器端代码。有趣的一个。但是在这种情况下,我需要对每个函数运行这个“检查”。这看起来并不聪明。=)刚刚检查过,这个不起作用,因为新导入的脚本(使用AJAX)将包含相同的函数名。实际上,我需要删除函数-就像它从未存在过一样。=)这几乎是不可能的,因为虽然您可以定义(var x=function())这样的函数来覆盖它们,但在这些函数中可能有addEventListeners(),它们绑定到文档或任何其他元素,您也需要删除它们,对吗?只有当您能够调用一个remove函数来了解这些eventListeners(或其他操作)并能够删除它们时,它才会起作用。这是一个很好的方法。如果没有人提供更好的解决方案,我会使用它。认为我的方法/结构一团糟是不好的,你只是不知道而已我不认为这会有什么帮助。如果OP想要使用其他地方的
window.js7711
中的任何内容,那么它需要通过返回或将其附加到window中,从函数中导出。无论哪种方式,在您删除
window.js7711
后,泄漏的内容都会保留下来。这将不起作用,因为该函数中可能会有一些内容(例如,添加到某个对象中的事件侦听器)在仅删除“main”函数时不会被删除。如果是这样,我想这不是我需要的解决方案。那么globalEval()与普通的eval相比有什么变化呢?对我来说没什么。我懒得用AJAX加载javascript。使用globalEval,我仍然可以访问以前以相同方式加载的函数。
window.js7711 = function() {
// javascript and jquery stuff (lots)
}