使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 相关文章推荐
javascript的onchange事件与jQuery的change()方法比较
Sep 28 Javascript
javascript instanceof 与typeof使用说明
Jan 11 Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
Jul 03 Javascript
jquery基础教程之deferred对象使用方法
Jan 22 Javascript
jQuery中clone()方法用法实例
Jan 16 Javascript
JavaScript使用yield模拟多线程的方法
Mar 19 Javascript
Bootstrap中表单控件状态(验证状态)
Aug 04 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
Aug 05 Javascript
js 获取html5的data属性实现方法
Jul 28 Javascript
[js高手之路]原型式继承与寄生式继承详解
Aug 28 Javascript
Angular4 反向代理Details实践
May 30 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 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
Yii框架的布局文件实例分析
2019/09/04 PHP
JS中 用户登录系统的解决办法
2013/04/15 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
Python类反射机制使用实例解析
2019/12/30 Python
Python之字典对象的几种创建方法
2020/09/30 Python
python Zmail模块简介与使用示例
2020/12/19 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
如何获得EntityManager
2014/02/09 面试题
创业计划书中包含的9个方面
2013/12/26 职场文书
战友聚会邀请函
2014/01/18 职场文书
军神教学反思
2014/02/04 职场文书
客服部班长工作责任制
2014/02/25 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
毕业实习单位意见
2015/06/04 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL