动态载入/删除/更新外部 JavaScript/Css 文件的代码


Posted in Javascript onJuly 03, 2010

动态载入 JavaScript/Csss 文件
传统加载外部JavaScript(*.js) 或者 Css(*.css)文件的方法是直接在<head>标签里面进行添加:

<head> 
<script type="text/javascript" src="myscript.js"></script> 
<link rel="stylesheet" type="text/css" href="main.css" /> 
</head>

这些文件用这种方式会同步加载到当前这个页面。

现在用动态的方式载入JavaScript/Css文件:

用 DOM createElement 方法创建一个 “script” 或者 ”link” 元素
设置相应的属性
使用 appendChild 方法, 把创建的元素插入到 head 标签的末尾

function loadjscssfile(filename, filetype){ 
//如果文件类型为 .js ,则创建 script 标签,并设置相应属性 
if (filetype=="js"){ 
var fileref=document.createElement('script'); 
fileref.setAttribute("type","text/javascript"); 
fileref.setAttribute("src", filename); 
} 
//如果文件类型为 .css ,则创建 script 标签,并设置相应属性 
else if (filetype=="css"){ 
var fileref=document.createElement("link"); 
fileref.setAttribute("rel", "stylesheet"); 
fileref.setAttribute("type", "text/css"); 
fileref.setAttribute("href", filename); 
} 
if (typeof fileref!="undefined") 
document.getElementsByTagName("head")[0].appendChild(fileref); 
} 
//动态添加一个.js 文件 
loadjscssfile("myscript.js", "js"); 
//像添加.js文件一样,动态添加一个.php文件 
loadjscssfile("javascript.php", "js"); 
//动态一个.css文件 
loadjscssfile("mystyle.css", "css");

为了防止多次载入同一个js/css文件, 添加以下判断(这只是粗略检测)
//临时载入的文件名 
var filesadded=""; function checkloadjscssfile(filename, filetype){ 
if (filesadded.indexOf("["+filename+"]")==-1){ 
loadjscssfile(filename, filetype); 
//把 [filename] 存入 filesadded 
filesadded+="["+filename+"]"; 
} 
else{ 
alert("file already added!"); 
} 
//第一次载入 
checkloadjscssfile("myscript.js", "js"); 
//重复载入同一个文件, 失败 
checkloadjscssfile("myscript.js", "js");

动态删除 JavaScript/Csss 文件
注意:ie6/7 下动态删除样式时有bug. 2种解决方案:1.样式表里不要有import的样式表 2.把link的type属性设置为空值, 然后再修改 href 的地, 或者直接设置href为空, 最后再把type值设置成”text/css” 强制让ie解释新的样式表。

取得相应的 DOM 元素
根据 文件名&文件类型 定位元素
用 DOM removeChild 删除一个 “script” 或者 ”link” 元素

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--){ 
if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1) 
allsuspects[i].parentNode.removeChild(allsuspects[i]); 
} 
} removejscssfile("somescript.js", "js"); 
removejscssfile("somestyle.css", "css");

动态更新 JavaScript/Csss 文件
使用 createElement 创建 要更新的 JavaScript/Css 元素
查找要被替换的元素
用 replaceChild 替换元素
function createjscssfile(filename, filetype){ 
if (filetype=="js"){ //if filename is a external JavaScript file 
var fileref=document.createElement('script') 
fileref.setAttribute("type","text/javascript") 
fileref.setAttribute("src", filename) 
} 
else if (filetype=="css"){ //if filename is an external CSS file 
var fileref=document.createElement("link") 
fileref.setAttribute("rel", "stylesheet") 
fileref.setAttribute("type", "text/css") 
fileref.setAttribute("href", filename) 
} 
return fileref 
} function replacejscssfile(oldfilename, newfilename, 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--){ 
if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(oldfilename)!=-1){ 
var newelement=createjscssfile(newfilename, filetype); 
allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i]); 
} 
} 
} 
//用 "newscript.js" 替换 "oldscript.js" 
replacejscssfile("oldscript.js", "newscript.js", "js"); 
//用 "newscript.css" 替换 "oldscript.css" 
replacejscssfile("oldstyle.css", "newscript.css","css");
Javascript 相关文章推荐
你真的了解JavaScript吗?
Feb 24 Javascript
几个比较实用的JavaScript 测试及效验工具
Apr 18 Javascript
jquery.validate分组验证代码
Mar 17 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
Apr 11 jQuery
JS左右无缝轮播功能完整实例
May 16 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
Oct 17 Javascript
vue中英文切换实例代码
Jan 21 Javascript
vue父子组件间引用之$parent、$children
May 20 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 Javascript
一个原生的用户等级的进度条
Jul 03 #Javascript
清空上传控件input file的值
Jul 03 #Javascript
javascript深入理解js闭包
Jul 03 #Javascript
JSON JQUERY模板实现说明
Jul 03 #Javascript
jquery.boxy插件的iframe扩展代码
Jul 02 #Javascript
JQuery AJAX提交中文乱码的解决方案
Jul 02 #Javascript
IE本地存储userdata的一个bug说明
Jul 01 #Javascript
You might like
php 传值赋值与引用赋值的区别
2010/12/29 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
浅谈php://filter的妙用
2019/03/05 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
JavaScript null和undefined区别分析
2009/10/14 Javascript
js 操作select相关方法函数
2009/12/06 Javascript
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
Sanic框架流式传输操作示例
2018/07/18 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
Django Rest framework频率原理与限制
2019/07/26 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
详解python的变量缓存机制
2021/01/24 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
视图的作用
2014/12/19 面试题
抗洪抢险事迹材料
2014/05/06 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
Pygame Event事件模块的详细示例
2021/11/17 Python