动态载入/删除/更新外部 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 相关文章推荐
Jquery AJAX POST与GET之间的区别
Nov 14 Javascript
使用jQuery和PHP实现类似360功能开关效果
Feb 12 Javascript
使用CSS样式position:fixed水平滚动的方法
Feb 19 Javascript
javascript实现时间格式输出FormatDate函数
Jan 13 Javascript
javascript 的变量、作用域和内存问题
Apr 19 Javascript
Vue列表页渲染优化详解
Jul 24 Javascript
vue中实现图片和文件上传的示例代码
Mar 16 Javascript
小程序视频列表中视频的播放与停止的示例代码
Jul 20 Javascript
vuejs 制作背景淡入淡出切换动画的实例
Sep 01 Javascript
Vue组件之高德地图地址选择功能的实例代码
Jun 21 Javascript
Vue路由对象属性 .meta $route.matched详解
Nov 04 Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 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程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
用PHP实现图象锐化代码
2007/06/14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
php字符集转换
2017/01/23 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
validator验证控件使用代码
2010/11/23 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
js中function()使用方法
2013/12/24 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
ES6 Map结构的应用实例分析
2019/06/26 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
python和opencv实现抠图
2018/07/18 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
对Python实现累加函数的方法详解
2019/01/23 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
python 实现矩阵按对角线打印
2019/11/29 Python
python模拟斗地主发牌
2020/04/22 Python
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
办公室文秘自我评价
2013/09/21 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
详解python字符串驻留技术
2021/05/21 Python
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL