动态加载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 学习笔记 防止发生命名冲突
Jul 30 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
Aug 05 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
Bootstrap源码学习笔记之bootstrap进度条
Dec 24 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
Jul 20 Javascript
vue打包相关细节整理(小结)
Sep 28 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
May 14 Javascript
深入了解query和params的使用区别
Jun 24 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 Javascript
JavaScript this关键字指向常用情况解析
Sep 02 Javascript
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
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 无限级数据JSON格式及JS解析
2010/07/17 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
AngularJS实现注册表单验证功能
2017/10/16 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
Python求算数平方根和约数的方法汇总
2016/03/09 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
Python try except else使用详解
2021/01/12 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
浙大网新C/C++面试解惑
2015/05/27 面试题
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
个人借款担保书
2014/04/02 职场文书
机械系毕业生求职信
2014/05/28 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书