动态加载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 相关文章推荐
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 Javascript
from 表单提交返回值用post或者是get方法实现
Aug 21 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
Javascript设计模式之装饰者模式详解篇
Jan 17 Javascript
canvas 实现中国象棋
Feb 17 Javascript
详解在Vue中通过自定义指令获取dom元素
Mar 04 Javascript
javascript 中关于array的常用方法详解
May 05 Javascript
angularJs提交文本框数据到后台的方法
Oct 08 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
Jun 22 Javascript
vux-scroller实现移动端上拉加载功能过程解析
Oct 08 Javascript
vscode+gulp轻松开发小程序的完整步骤
Oct 18 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之第四天
2006/10/09 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
初识Laravel
2014/10/30 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
python删除不需要的python文件方法
2018/04/24 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
Python循环结构的应用场景详解
2019/07/11 Python
Python如何使用字符打印照片
2020/01/03 Python
Python流程控制常用工具详解
2020/02/24 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
质量安全标语
2014/06/07 职场文书
工作收入住址证明
2014/10/28 职场文书
优秀团队申报材料
2014/12/26 职场文书
公开致歉信
2019/06/24 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
MySQL Server层四个日志的实现
2022/03/31 MySQL