龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

javascript include/import 动态加载js/css文件方法总结

时间:2012-12-29 08:41来源:未知 作者:admin 点击:
分享到:
在javascript中没有像php中可以使用include加载文件,这里我们需要自己定义一些方法,下面总结了关于javascript include/import 动态加载js/css文件方法有需要的同学可参考本文章。 第一种:一般
在javascript中没有像php中可以使用include加载文件,这里我们需要自己定义一些方法,下面总结了关于javascript include/import 动态加载js/css文件方法有需要的同学可参考本文章。

第一种:一般用在外部CSS文件中加载必须的文件

 程序代码

 代码如下
@import url(style.css);

/*只能用在CSS文件中或者style标签中*/


第二种:简单的在页面中加载一个外部CSS文件

 程序代码

 代码如下
document.createStyleSheet(cssFile);


第三种:用createElement方法创建CSS的Link标签

 程序代码

 代码如下
var head = document.getElementsByTagName('HEAD').item(0);
var style = document.createElement('link');
style.href = 'style.css';
style.rel = 'stylesheet';
style.type = 'text/css';
head.appendChild(style);


这里贴上我以前在项目中使用的几个函数,希望对大家有用!

 程序代码

 代码如下

function loadJs(file){
    var scriptTag = document.getElementById('loadScript');
    var head = document.getElementsByTagName('head').item(0);
    if(scriptTag) head.removeChild(scriptTag);
    script = document.createElement('script');
    script.src = "../js/mi_"+file+".js";
    script.type = 'text/javascript';
    script.id = 'loadScript';
    head.appendChild(script);
}

function loadCss(file){
    var cssTag = document.getElementById('loadCss');
    var head = document.getElementsByTagName('head').item(0);
    if(cssTag) head.removeChild(cssTag);
    css = document.createElement('link');
    css.href = "../css/mi_"+file+".css";
    css.rel = 'stylesheet';
    css.type = 'text/css';
    css.id = 'loadCss';
    head.appendChild(css);
}

使用JS动态在页面加载CSS文件

刚刚在写随笔的时候发现cnblogs好像将自己在文章的HTML里定义的CSS(例如:<link rel="stylesheet" type="text/css" href="xxx.css" /> )都过滤掉了,记得以前自己收藏过一个JS函数,可以动态加载CSS文件,翻翻电脑果然找到了,代码贴出来,说不准在工作中也会用到呢。

 代码如下


<script language="javascript">

    function loadjscssfile(filename, filetype) {
        if (filetype == "js") {
            var fileref = document.createElement('script');
            fileref.setAttribute("type", "text/javascript");
            fileref.setAttribute("src", filename)
        } else if (filetype == "css") {
            var fileref = document.createElement("link");
            fileref.setAttribute("rel", "stylesheet");
            fileref.setAttribute("type", "text/css");
            fileref.setAttribute("href", filename)
        }
        if (typeof fileref != "undefined") document.getElementsByTagName("head")[0].appendChild(fileref)
    }
    loadjscssfile("http://news.163.com/special/0001jt/dblue.css", "css");
</


一个完美的插件可动态加载js,和css

更新:2012.07.13

*修复queued因定义为this.queued导致多个load混乱

*更改参数为数组

使用方法为直接调用Util.load(),可以为每个文件添加回调,也可以添加一个全局回调,示例:

 代码如下

[


    Util.load([


 

    ["/misc/js/content.js", function() {

 

        // 单个回调

 

    }],

 

    ["/misc/js/comment.js"],

 

    ["/misc/js/home.js"]

 

], function() {

 

    // 全局回调

 

});


] [


    var Util = {


 

    /**

 

     * 全局js列表

 

     */

 

    scripts: {},

 

    head: document.head || document.getElementsByTagName("head")[0] || document.documentElement,

 

 

 

    /**

 

     * 异步加载js文件

 

     */

 

    load: function(queue, callback) {

 

        var self = this, queued = queue.length;

 

 

 

        for (var i = 0, l = queue.length; i < l; i++) {

 

            var elem;

 

            elem = document.createElement("script");

 

            elem.setAttribute("type", "text/javascript");

 

            elem.setAttribute("async", "async");

 

            elem.setAttribute("src", queue[i][0]);

 

            // 文件还没有处理过

 

            if (typeof this.scripts[elem.src] === "undefined") {

 

                // 使onload取得正确elem和index

 

                (function(elem, index) {

 

                    elem.onload = elem.onreadystatechange = function() {

 

                        if (! elem.readyState || /loaded|complete/.test(elem.readyState)) {

 

                            queued--;

 

                            // 解决IE内存泄露

 

                            elem.onload = elem.onreadystatechange = null;

 

                            // 释放引用

 

                            elem = null;

 

                            // 调用callback

 

                            queue[index][1] && queue[index][1]();

 

                            // 队列全部加载,调用最终callback

 

                            if (queued === 0) {

 

                                callback && callback();

 

                            }

 

                        }

 

                    };

 

                })(elem, i);

 

            }

 

            // 已处理,调用callback

 

            else {

 

                queued--;

 

                queue[i][1] && queue[i][1]();

 

            }

 

            this.head.appendChild(elem);

 

 

 

            // 队列全部加载,调用最终callback

 

            if (queued === 0) {

 

                callback && callback();

 

            }

 

        }

 

    }

 

};

 

 

 

 


]

使用举例:

 // 路径写法和<script><link>中一样就行了

/ 第一种 单个文件,带回调

 代码如下

include("js/jquery.js", function () {

 

    alert("i'm callback!");

 

});


// 第二种 多个文件,带回调

// 多个文件以数组的形式书写,每个文件可以单独带回调,

// 最后一个回调将在最后一个文件加载完后调用

 代码如下

include([

 

    ["js/jquery.js", function () {

 

        alert("i'm callback of jquery.js");

 

    }],

 

    ["js/misc.js", function () {

 

        alert("i'm callback of misc.js");

 

    }],

 

    ["css/style.css", function () {

 

        alert("i'm callback of style.css");

 

    }],

 

    ["css/index.css"]

 

], function () {

 

    alert("i'm the last callback!");

 

});


还有些问题,有空再完善下。


精彩图集

赞助商链接