动态加载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每次Title显示不同的名言
Sep 25 Javascript
jQuery技巧总结
Jan 01 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
javascript获取select标签选中的值
Jun 04 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
Oct 21 Javascript
jquery日历插件e-calendar升级版
Nov 10 Javascript
关于不同页面之间实现参数传递的几种方式讨论
Feb 13 Javascript
ES6新特性之字符串的扩展实例分析
Apr 01 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
Apr 13 Javascript
javascript兼容性(实例讲解)
Aug 15 Javascript
微信小程序 轮播图实现原理及优化详解
Sep 29 Javascript
JS实现按比例缩小图片宽高
Aug 24 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
substr()函数中文版
2006/10/09 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
php验证session无效的解决方法
2014/11/04 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
php时间计算相关问题小结
2016/05/09 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
js实现秒表计时器
2019/12/16 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Python ldap实现登录实例代码
2016/09/30 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
家庭教育先进个人事迹材料
2014/01/24 职场文书
《狼》教学反思
2014/03/02 职场文书
Java对文件的读写操作方法
2022/04/29 Java/Android