动态载入/删除/更新外部 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 相关文章推荐
JS中判断null、undefined与NaN的方法
Mar 26 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
BootStrap的JS插件之轮播效果案例详解
May 16 Javascript
深入理解js generator数据类型
Aug 16 Javascript
javascript设计模式之策略模式学习笔记
Feb 15 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
May 28 Javascript
javascript实现二叉树的代码
Jun 08 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
vue.js实例对象+组件树的详细介绍
Oct 20 Javascript
又拍云 Node.js 实现文件上传、删除功能
Oct 28 Javascript
zepto.js 实时监听输入框的方法
Dec 04 Javascript
Webpack中loader打包各种文件的方法实例
Sep 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
python实现简单ftp客户端的方法
2015/06/28 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
Django开发的简易留言板案例详解
2018/12/04 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
工地安全标语
2014/06/07 职场文书
2015年父亲节寄语
2015/03/23 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
总结Python连接CS2000的详细步骤
2021/06/23 Python
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android