无法删除动态添加的脚本

时间:2013-04-13 10:31:35

标签: javascript append removechild

我附加了一个带有javascript和样式表引用的子元素,但是当我再也没有使用它时我想再删除它。

        var head = document.getElementsByTagName('head')[0];

        // We create the style
        var style = document.createElement('link');
        style.setAttribute("rel", "stylesheet");
        style.setAttribute("type", "text/css");
        style.setAttribute("href", '_css/style.'+app+'.css');

        var script = document.createElement('script');
        script.setAttribute("type", "text/javascript");
        script.setAttribute("src", '_scripts/_js/script.'+app+'.js');

        // And the append the style
        head.appendChild(style);
        head.appendChild(script);

这是我添加脚本的方式,它完美地工作..但我无法弄清楚如何从HTML中的head标签再次删除标签。

有没有人知道如何再次从标头标签中删除标签..我一直在搜索Stackoverflow,但实际上似乎没有人有这种问题,但如果有人知道有另一个问题回答这个问题,请告诉我..

4 个答案:

答案 0 :(得分:4)

简而言之,你不能,即使你删除了scripts标签,这些脚本都在内存中,也没有删除它们。

一个hack就是编写一个脚本来识别其他脚本正在做什么(添加事件,创建变量,函数等)然后中和它们

但解决此问题的真正方法是在closure中编写脚本,以便在程序控制超出其范围时将其从内存中删除。

您可能还想深入了解Require.js

答案 1 :(得分:3)

您可以使用removeChild删除元素:

var head = document.getElementsByTagName('head')[0];

//removing them from the head, where you added them
head.removeChild(script);
head.removeChild(style);

然而:

  • 删除的样式/链接元素将删除其中定义的样式。
  • 但JS不能以这种方式卸载。他们将留在记忆中。如果你有一些逻辑来管理脚本会更好,比如一些依赖管理器。

因此removing style/link elements might have some use,但删除脚本元素没有用。

答案 2 :(得分:0)

我担心我们无法删除脚本标记。即使您将其删除,脚本也已执行,无法撤消。

例如:在test.js文件中

window.Test = "aaa";

当我们引用此脚本时,浏览器将下载并自动执行文件中的所有语句。当我们删除脚本标记时,语句已经执行(窗口变量已经具有属性Test)

答案 3 :(得分:-1)

document.getElementsByTagName('head')[0].removeChild(document.getElementsByTagName('head')[0].getElementsByTagName('script')[0]);
相关问题