动态加载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 相关文章推荐
jquery 新手学习常见问题解决方法
Apr 18 Javascript
select标记美化--JS式插件、后期加载
Apr 01 Javascript
jquery默认校验规则整理
Mar 24 Javascript
JS实现自动切换文字的导航效果代码
Aug 27 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
js removeChild 方法深入理解
Aug 16 Javascript
浅析Javascript ES6中的原生Promise
Aug 25 Javascript
JavaScript定义全局对象的方法示例
Jan 12 Javascript
js 监控iframe URL的变化实例代码
Jul 12 Javascript
js实现一个简单的MVVM框架示例
Jan 15 Javascript
vue:el-input输入时限制输入的类型操作
Aug 05 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
php面向对象的方法重载两种版本比较
2008/09/08 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
YUI模块开发原理详解
2013/11/18 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
python实现邮件自动发送
2019/08/10 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
Python实现括号匹配方法详解
2020/02/10 Python
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
MySQL面试题
2014/01/12 面试题
联谊活动策划书
2014/01/26 职场文书
转让协议书范本
2014/09/13 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
旷工检讨书大全
2015/08/15 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python