我有这三个脚本文件
<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都有处理滚动事件的代码。 现在,即使用户已经从收件箱切换到新闻,新闻中的滚动处理程序也会被调用。我需要确保当用户处于特定选项卡时,仅调用该选项卡的处理程序。
可以解决问题的一些方向是 -
请帮助我,其中哪一种更好。
答案 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
),但执行的代码仍然有效,例如所有创建的变量仍然存在,脚本中设置的事件处理程序仍然有效。
如果您只在其中处理事件,则需要从脚本中取消绑定所有处理程序。否则,您可以考虑引入一些您在脚本代码中检查的全局标志,并仅在设置标志时执行某些功能。