动态载入/删除/更新外部 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 新浪背投广告实现代码
Jul 07 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
原始XMLHttpRequest方法详情回顾
Nov 28 Javascript
js简单实现根据身份证号码识别性别年龄生日
Nov 29 Javascript
jQuery实现鼠标可拖动调整表格列宽度
May 26 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
Aug 22 Javascript
原生 JS Ajax,GET和POST 请求实例代码
Jun 08 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
简单实现JS计算器功能
Dec 21 Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 Javascript
JS实现倒计时图文效果
Nov 17 Javascript
Vue利用Blob下载原生二进制数组文件
Sep 25 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实现的Captcha验证码类实例
2014/09/22 PHP
浅谈php和.net的区别
2014/09/28 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
php使用PDO方法详解
2014/12/27 PHP
使用php-timeit估计php函数的执行时间
2015/09/06 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
php微信开发之谷歌测距
2018/06/14 PHP
js 深拷贝函数
2008/12/04 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
详解javascript常用工具类的封装
2018/01/30 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
Python 面向对象 成员的访问约束
2008/12/23 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
汽车队司机先进事迹材料
2014/02/01 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
商务日语专业自荐信
2014/04/17 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
介绍信范文
2015/01/31 职场文书
再谈python_tkinter弹出对话框创建
2022/03/20 Python
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸