`
coconut_zhang
  • 浏览: 531472 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

 
阅读更多

动态载入 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");
分享到:
评论

相关推荐

    jQuery权威指南-源代码

    7.10 综合案例分析—使用uploadify插件实现文件上传功能 /232 7.10.1 需求分析/232 7.10.2 效果界面/233 7.10.3 功能实现/234 7.10.4 代码分析/236 7.11 本章小结/241 第8章 jQuery UI插件/242 8.1 认识...

    JavaScript实战

    外部JavaScript文件 5 1.3 第一个JavaScript程序 7 1.4 把文本写到Web页面上 9 1.5 附件外部JavaScript文件 10 1.6 追踪错误 12 1.6.1 Firefox JavaScript控制台 13 1.6.2 显示Internet Explorer错误对话框 14 1.6.3...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part1.rar

     第5章 动态修改样式和层叠样式表   5.1 W3CDOM2样式规范   5.1.1 CSSStyleSheet对象   5.1.2 CSSStyleRule对象   5.1.3 CSSStyleDeclaration对象   5.1.4 支持的匮乏   5.2 当DOM 脚本遇到...

    精通JavaScript

    • 1.3.htm 调用外部JavaScript文件 • 1.3.js 1.3.htm使用的外部JavaScript文件 第2章(\第2章) • 2.1.htm Infinity应用 • 2.2.htm NaN与isNaN()的用法 • 2.3.htm Infinity值...

    精通javascript

    • 1.3.htm 调用外部JavaScript文件 • 1.3.js 1.3.htm使用的外部JavaScript文件 第2章(\第2章) • 2.1.htm Infinity应用 • 2.2.htm NaN与isNaN()的用法 • 2.3.htm Infinity值...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part3.rar

     第5章 动态修改样式和层叠样式表   5.1 W3CDOM2样式规范   5.1.1 CSSStyleSheet对象   5.1.2 CSSStyleRule对象   5.1.3 CSSStyleDeclaration对象   5.1.4 支持的匮乏   5.2 当DOM 脚本遇到...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part2.rar

     第5章 动态修改样式和层叠样式表   5.1 W3CDOM2样式规范   5.1.1 CSSStyleSheet对象   5.1.2 CSSStyleRule对象   5.1.3 CSSStyleDeclaration对象   5.1.4 支持的匮乏   5.2 当DOM 脚本遇到...

    34款经典Dreamweaver插件

    Text to SWF 类别:DW Command 把文档中选定的文字转换成SWF文件(奇妙的功能!) 增强DW的ASP+编码功能的插件 · ASP+ Dream 增强DW的ASP+编码功能的插件 ...根据分辨率不同载入不同的外部样式表

    dreamweaver的各种组件

    CSS on resolution 根据不同的分辨率调入相应的外部css文件 Css on platform 根据不同的操作系统调入相应的外部css文件 Css on Browser 根据不同的浏览器调入相应的外部css文件 FontTagKiller 将页面中所有的标记...

    jQuery权威指南366页完整版pdf和源码打包

    3.4.1 内部插入节点方法 3.4.2 外部插入节点方法 3.5 复制节点 3.6 替换节点 3.7 包裹节点 3.8 遍历元素 3.9 删除元素 3.10 综合案例分析—数据删除和图片预览在项目中的应用 3.10.1 需求分析 ...

    dhtmlxGridk 中文文档

    dhtmlxGrid 启用Ajax的JavaScript网格控制与尖端功能,强大的数据绑定,并与大型数据集的出色表现 。组件是易于使用,并...dhtmlxGrid表格展现通过加载XML文件来载入表头、表尾、表格数据实现展现、操作、回写功能。

    精通JS脚本之ExtJS框架.part2.rar

    1.2.2 链接外部JavaScript文件 1.2.3 注意事项 1.3 基础语法 1.3.1 数据类型 1.3.2 变量与常量 1.3.3 运算符 1.4 流程控制语句 1.4.1 if条件语句 1.4.2 switch条件语句 1.4.3 while循环语句 1.4.4 do ...

    精通JS脚本之ExtJS框架.part1.rar

    1.2.2 链接外部JavaScript文件 1.2.3 注意事项 1.3 基础语法 1.3.1 数据类型 1.3.2 变量与常量 1.3.3 运算符 1.4 流程控制语句 1.4.1 if条件语句 1.4.2 switch条件语句 1.4.3 while循环语句 1.4.4 do ...

    flex3的cookbook书籍完整版dpf(包含目录)

    从SWF 文件中生成动态皮肤 9.18 节. 自定义引导界面 第十章. 拖拽操作(360) 10.1.节使用DragManager 类 10.2 节指定一个拖拽代理 10.3 节在List 内部进行拖拽操作 10.4 节在List 之间进行拖拽操作 10.5 节. 启动...

    angular-ui-tree

    角度UI树 Angular UI Tree是一个AngularJS UI组件,可以对嵌套列表进行排序,提供拖放支持,并且不依赖jQuery。 如果您是使用angular-...载入CSS 在您的应用程序中加载css文件: angular-ui-tree.min.css : &lt; l

    artDialog_Demo

    [更新列表] ------------------------------------------------------------------------------------------------ v2.1.1 1、修复IE6静止定位的对话框导致页面变长的问题 v2.1.0 1、 增加menuBtn参数, 支持让...

Global site tag (gtag.js) - Google Analytics