当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 使javascript也能包含文件

Javascript
用户注册常用javascript代码
JavaScript 事件监听实例代码[兼容IE,firefox] 含注释
javascript appendChild,innerHTML,join性能比较代码
JavaScript 继承详解 第一篇
javascript 控制 html元素 显示/隐藏实现代码
Javascript 判断函数类型完美解决方案
获取URL地址中的文件名和参数的javascript代码
js 获取浏览器高度和宽度值(多浏览器)
FF IE兼容性的修改小结
JS URL传中文参数引发的乱码问题
javascript 24小时弹出一次的代码(利用cookies)
ie focus bug 解决方法
javascript concat数组累加 示例
javascript 触发事件列表 比较不错
当文本框的值发生改变时,触发事件,在IE中有效
javascript 操作table的特性
jquery判断单个复选框是否被选中的代码
关于javascript中的parseInt使用技巧
JavaScript 密码强度判断代码
js跨域和ajax 跨域问题的实现思路

Javascript 中的 使javascript也能包含文件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 177 ::
收藏到网摘: n/a

javascript功能强大,但一个问题是它不能包含其它的js文件,而其它非脚本语言却基本都是有这个功能的,不得不觉得有点遗憾。穷则思变,越来越发现不动态导入文件会严重加大加载页面的时间,经过实验,发现了一个办法,利用xhtml来实现这个功能,下面的函数就可以动态导入javascript文件和css样式文件:

复制代码 代码如下:

function $import(path,type,title){
var s,i;
if(type=="js"){
var ss=document.getElementsByTagName("script");
for(i=0;i<ss.length;i++){
if(ss[i].src && ss[i].src.indexOf(path)!=-1)return;
}
s=document.createElement("script");
s.type="text/javascript";
s.src=path;
}else if(type=="css"){
var ls=document.getElementsByTagName("link");
for(i=0;i<ls.length;i++){
if(ls[i].href && ls[i].href.indexOf(path)!=-1)return;
}
s=document.createElement("link");
s.rel="alternate stylesheet";
s.type="text/css";
s.href=path;
s.title=title;
s.disabled=false;
}
else return;
var head=document.getElementsByTagName("head")[0];
head.appendChild(s);
}

对于样式文件,默认导入后是立即生效的,这有可能会导致和前面一种选定样式效果重叠,造成混乱。所以在我的blog中是使用下面的函数来实现样式的切换功能:

复制代码 代码如下:

function setStyle(title) {
var i, links,eflag=false;
links = document.getElementsByTagName("link");
for(i=0; links[i]; i++) {
if(links[i].getAttribute("rel").indexOf("style") != -1 && links[i].getAttribute("title")) {
links[i].disabled = true;
if(links[i].getAttribute("title").indexOf(title) != -1){links[i].disabled = false;eflag=true;}
}
}
if(!eflag){
$import("skin/"+title+"/default.css","css",title);
setStyle(title);
}
}


最后,说明一下,因为javascript文件是需要从远程加载的,所以有人可能会问在调用$import()函数后,是立即执行$import()后面的语句,还是等加载完以后再执行其后的语句。我粗略试验了一下,发现是等加载完后再执行后面的语句的,而且如果加载的js里有立即执行的代码,那么它会先于$import()后面的语句执行。这也是我们想要的结果,因为这样就可以在$import()之后调用加载的文件里的函数了。