使javascript也能包含文件


Posted in Javascript onOctober 26, 2006

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()之后调用加载的文件里的函数了。
Javascript 相关文章推荐
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
ajax 文件上传应用简单实现
Mar 03 Javascript
两个select之间option的互相添加操作(jquery实现)
Nov 12 Javascript
JavaScript 继承使用分析
May 12 Javascript
文本框input聚焦失焦样式实现代码
Oct 12 Javascript
使用jquery实现图文切换效果另加特效
Jan 20 Javascript
jquery实现的一个导航滚动效果具体代码
May 27 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
JavaScript判断微信浏览器实例代码
Jun 13 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
layui实现下拉框三级联动
Jul 26 Javascript
利用XMLHTTP传递参数在另一页面执行并刷新本页
Oct 26 #Javascript
如何用javascript控制上传文件的大小
Oct 26 #Javascript
动态改变textbox的宽高的js
Oct 26 #Javascript
js传值 判断
Oct 26 #Javascript
点击广告后才能获得下载地址
Oct 26 #Javascript
PJBlog插件 防刷新的在线播放器
Oct 25 #Javascript
PJ Blog修改-禁止复制的代码和方法
Oct 25 #Javascript
You might like
深入分析php之面向对象
2013/05/15 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
php排序算法实例分析
2016/10/17 PHP
显示、隐藏密码
2006/07/01 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
vue中appear的用法
2017/08/17 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
python 网络编程常用代码段
2016/08/28 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
python FTP编程基础入门
2021/02/27 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
酒店总经理工作职责
2013/12/13 职场文书
服务员态度差检讨书
2014/10/28 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript