发生特定事件时从文档中删除javascript文件

时间:2012-02-14 17:11:33

标签: javascript

我有这三个脚本文件

<script type="text/javascript" src="script/inbox.js"></script>
<script type="text/javascript" src="script/news.js"></script>
<script type="text/javascript" src="script/friend.js"></script>

我在用户点击某些链接时动态加载这些文件。

例如,

当用户点击收件箱时,inbox.js以类似方式加载。

所有这些文件inbox.js,news.js,friend.js都有处理滚动事件的代码。 现在,即使用户已经从收件箱切换到新闻,新闻中的滚动处理程序也会被调用。我需要确保当用户处于特定选项卡时,仅调用该选项卡的处理程序。

可以解决问题的一些方向是 -

  1. 从文档中动态卸载其他脚本文件。
  2. 取消绑定其他标签的滚动处理程序。
  3. 我可以将ID或类分配给这些脚本文件并卸载它们。
  4. 请帮助我,其中哪一种更好。

2 个答案:

答案 0 :(得分:1)

function removejscssfile(filename, filetype){
 var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none"      
 var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none"     
 var allsuspects=document.getElementsByTagName(targetelement)
 for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for     matching elements to remove
    if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
        allsuspects[i].parentNode.removeChild(allsuspects[i]) //remove element by     calling parentNode.removeChild()
     }
 }

removejscssfile("inbox.js", "js") //remove all occurences of "somescript.js" on page

此函数可用于从文档中动态删除js或css任何类型的脚本..

答案 1 :(得分:0)

加载后无法“动态卸载”脚本。您可以删除DOM元素(为其分配ID并在其父节点上调用removeChild),但执行的代码仍然有效,例如所有创建的变量仍然存在,脚本中设置的事件处理程序仍然有效。

如果您只在其中处理事件,则需要从脚本中取消绑定所有处理程序。否则,您可以考虑引入一些您在脚本代码中检查的全局标志,并仅在设置标志时执行某些功能。