动态加载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 Base64编码和解码,实现URL参数传递。
Sep 18 Javascript
jquery 插件学习(二)
Aug 06 Javascript
js取整数、取余数的方法
May 11 Javascript
js实现div拖动动画运行轨迹效果代码分享
Aug 27 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
May 20 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
微信小程序 教程之WXSS
Oct 18 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
Mar 14 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
Sep 02 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
Mar 09 Javascript
JavaScript运行机制实例分析
Apr 11 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
php4与php5的区别小结(配置异同)
2011/12/20 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
php图片缩放实现方法
2014/02/20 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
python实现requests发送/上传多个文件的示例
2018/06/04 Python
python 为什么说eval要慎用
2019/03/26 Python
django跳转页面传参的实现
2020/09/17 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
全球立体声:World Wide Stereo
2018/09/29 全球购物
计算机科学与技术应届生求职信
2013/11/07 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
公司合并协议书范本
2014/09/30 职场文书
办公室岗位职责
2015/02/04 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
经理岗位职责范本
2015/04/15 职场文书
2015年老干部工作总结
2015/04/23 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
Ajax实现异步加载数据
2021/11/17 Javascript
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers