使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 相关文章推荐
jQuery 添加/移除CSS类实现代码
Feb 11 Javascript
判断浏览器的javascript版本的代码
Sep 03 Javascript
JavaScript 大数据相加的问题
Aug 03 Javascript
JavaScript prototype 使用介绍
Aug 29 Javascript
禁用JavaScript控制台调试的方法
Mar 07 Javascript
jQuery中prepend()方法用法实例
Dec 25 Javascript
javascript类型系统 Window对象学习笔记
Jan 07 Javascript
浅析JS异步加载进度条
May 05 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
Nov 28 Javascript
javascript中this关键字详解
Dec 12 Javascript
让Vue也可以使用Redux的方法
May 23 Javascript
vue3.0 项目搭建和使用流程
Mar 04 Vue.js
利用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循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
python多进程操作实例
2014/11/21 Python
Python中的迭代器漫谈
2015/02/03 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python内置数据类型之列表操作
2018/11/12 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
python实现拼接图片
2020/03/23 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
python3爬虫中异步协程的用法
2020/07/10 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
教师节活动主持词
2014/04/02 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
销售活动策划方案
2014/08/26 职场文书
公证委托书标准格式
2014/09/11 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫