动态载入/删除/更新外部 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 相关文章推荐
json对象转字符串如何实现
Dec 02 Javascript
Javascript常用字符串判断函数代码分享
Dec 08 Javascript
jquery中JSON的解析方式
Mar 16 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
Oct 28 Javascript
AngularJS 使用$sce控制代码安全检查
Jan 05 Javascript
connection reset by peer问题总结及解决方案
Oct 21 Javascript
JS实现自动阅读单词(有道单词本添加功能)
Nov 14 Javascript
jQuery实现对网页节点的增删改查功能示例
Sep 18 jQuery
详细分析jsonp的原理和实现方式
Nov 20 Javascript
Javascript实现购物车功能的详细代码
May 08 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
Jul 19 Javascript
Nest.js环境变量配置与序列化详解
Feb 21 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的FTP学习(四)
2006/10/09 PHP
PHP经典的给图片加水印程序
2006/12/06 PHP
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
php分页查询的简单实现代码
2017/03/14 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
python保存数据到本地文件的方法
2018/06/23 Python
python实现zabbix发送短信脚本
2018/09/17 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
python pandas 时间日期的处理实现
2019/07/30 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
企业党员一句话承诺
2014/05/30 职场文书
革命电影观后感
2015/06/18 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js
python3操作redis实现List列表实例
2021/08/04 Python
JS实现九宫格拼图游戏
2022/06/28 Javascript