动态加载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 相关文章推荐
js字符编码函数区别分析
Jun 05 Javascript
javascript iframe编程相关代码
Dec 28 Javascript
为Extjs加加速(javascript加速)
Aug 19 Javascript
js 函数调用模式小结
Dec 26 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
Dec 05 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
Mar 24 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
jQuery each函数源码分析
May 25 Javascript
js实现不提示直接关闭网页窗口
Mar 30 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
Aug 07 Javascript
浅谈Vue.nextTick 的实现方法
Oct 25 Javascript
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 分页类(模仿google)-面试题目解答
2009/09/13 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
原生javascript实现图片无缝滚动效果
2016/02/12 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
面试题:react和vue的区别分析
2019/04/08 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
对python读取CT医学图像的实例详解
2019/01/24 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
pytorch SENet实现案例
2020/06/24 Python
Django数据库迁移常见使用方法
2020/11/12 Python
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
客户经理岗位职责
2013/12/08 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
函授自我鉴定范文
2014/02/06 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
临时用工协议书范本
2014/10/29 职场文书
中秋节慰问信
2015/02/15 职场文书
运动会通讯稿200字
2015/07/20 职场文书
MongoDB支持的数据类型
2022/04/11 MongoDB
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL