动态加载js、css的简单实现代码


Posted in Javascript onMay 26, 2016

一、原生js:

/**
     * 加载js和css文件
     * @param     jsonData.path        前缀路径
     * @param     jsonData.url        需要加载的js路径或css路径
     * @param     jsonData.type        需要加载的类型 js或css
    */
     function loadWriteFiles(jsonData)
     {
       jsonData.path = jsonData.path != undefined ? jsonData.path : "";
       if(jsonData.type == "js")
       {
        document.writeln("<script type='text/javascript' src='"+ jsonData.path + jsonData.url+"'></script>");
       }
       else if(jsonData.type == "css")
       {
        document.writeln("<link rel='stylesheet' href='"+jsonData.path + jsonData.url+"' type='text/css' />");
       }
     }
     
     /**
     * 加载js或css到head中
     * @param     jsonData.path        前缀路径
     * @param     jsonData.url        需要加载的js路径或css路径
     * @param     jsonData.type        需要加载的类型 js或css
     */
     function loadFilesToHead(jsonData)
     {
       jsonData.path = jsonData.path != undefined ? jsonData.path : "";
       if(jsonData.type == "js")
       {
         var _js = document.createElement("script");
         _js.setAttribute("type", "text/javascript");
         _js.setAttribute("src", jsonData.path + jsonData.url);
         _js.onload = _js.onreadystatechange=function(){ 
           if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){ 
             if("function" == typeof(jsonData["callback"]) && jsonData["callback"]){
                jsonData["callback"].call(this);
             }
           } 
           _js.onload=_js.onreadystatechange=null; 
         } 
         document.getElementsByTagName("head")[0].appendChild(_js);//追加到head标签内
       }
       else if(jsonData.type == "css")
       {
         var _css = document.createElement("link");
         _js.setAttribute("type", "text/css");
         _css.setAttribute("rel", "stylesheet");
         _css.setAttribute("href", jsonData.path + jsonData.url);
         document.getElementsByTagName("head")[0].appendChild(_css);//追加到head标签内
       }
     }

二、jquery版本:

采用deferred对象返回结果

var uiLoad = uiLoad || {};

(function($, $document, uiLoad) {
  "use strict";

  var loaded = [],
  promise = false,
  deferred = $.Deferred();

  uiLoad.load = function (srcs) {
    srcs = $.isArray(srcs) ? srcs : srcs.split(/\s+/);
    if(!promise){
      promise = deferred.promise();
    }

   $.each(srcs, function(index, src) {
    promise = promise.then( function(){
      return src.indexOf('.css') >=0 ? loadCSS(src) : loadScript(src);
    } );
   });
   deferred.resolve();
   return promise;
  };

  var loadScript = function (src) {
    if(loaded[src]) return loaded[src].promise();

    var deferred = $.Deferred();
    var script = $document.createElement('script');
    script.src = src;
    script.onload = function (e) {
      deferred.resolve(e);
    };
    script.onerror = function (e) {
      deferred.reject(e);
    };
    $document.body.appendChild(script);
    loaded[src] = deferred;

    return deferred.promise();
  };

  var loadCSS = function (href) {
    if(loaded[href]) return loaded[href].promise();

    var deferred = $.Deferred();
    var style = $document.createElement('link');
    style.rel = 'stylesheet';
    style.type = 'text/css';
    style.href = href;
    style.onload = function (e) {
      deferred.resolve(e);
    };
    style.onerror = function (e) {
      deferred.reject(e);
    };
    $document.head.appendChild(style);
    loaded[href] = deferred;

    return deferred.promise();
  }

})(jQuery, document, uiLoad);

以上这篇动态加载js、css的简单实现代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 获取字符串字节数的多种方法
Jun 02 Javascript
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
js 金额文本框实现代码
Feb 14 Javascript
javascript实现存储hmtl字符串示例
Apr 25 Javascript
JavaScript中的Web worker多线程API研究
Dec 06 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 Javascript
JavaScript实战之菜单特效
Aug 16 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
谈谈对vue响应式数据更新的误解
Aug 01 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
May 18 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 jQuery
JS hashMap实例详解
May 26 #Javascript
jQuery验证插件validate使用方法详解
Sep 13 #Javascript
动态加载js、css的实例代码
May 26 #Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 #Javascript
js将json格式的对象拼接成复杂的url参数方法
May 25 #Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 #Javascript
jquery分隔Url的param方法(推荐)
May 25 #Javascript
You might like
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
Javascript MD4
2006/12/20 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
在Python中使用next()方法操作文件的教程
2015/05/24 Python
python 文件查找及内容匹配方法
2018/10/25 Python
Python argparse模块应用实例解析
2019/11/15 Python
python输入中文的实例方法
2020/09/14 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
搬家公司的创业计划书
2014/01/01 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
解除劳动合同协议书
2014/04/14 职场文书
新教师培训方案
2014/06/08 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
golang正则之命名分组方式
2021/04/25 Golang
JavaScript 反射学习技巧
2021/10/16 Javascript