zoukankan      html  css  js  c++  java
  • JS动态添加样式和脚本

    在IE下style和script是特殊的元素,DOM无法访问其子节点,所以脚本和样式的动态生成需要考虑对IE的特殊处理

    对于样式,如果内容较少,或者不想放到文件中,可以使用Dom.style.cssText来批量设置。

    Style

    //加载样式内容
    function loadStyle(styleText){
        var s = document.createElement("style");
        s.type = "text/css";
        try{//IE
            s.styleSheet.cssText = styleText;
        }catch(e){//FF Chrome
            s.appendChild(document.createTextNode(styleText));
        }
        document.getElementsByTagName("head")[0].appendChild(s);
    }
    
    //加载样式文件
    function loadStyleFile(url){
        var s = document.createElement("link");
        s.href = url;
        s.type = "text/css";
        s.rel = "stylesheet";
        document.getElementsByTagName("head")[0].appendChild(s);
    }
    loadStyle("*{margin:0px;}");
    loadStyleFile("../CSS/Common.css");

    Script

    动态加载脚本内容

    //现在很多情况下都会需要按需加载脚本文件,所以动态加载脚本还是比较有意义的
    
    //加载脚本内容
    function loadScript(scriptText){
        var s = document.createElement("script");
        s.type = "text/javascript";
        try {//IE
            s.text = scriptText;
        } catch (e) {//FF Chrome
            s.appendChild(document.createTextNode(scriptText));
        }
        document.body.appendChild(s);
    }
    
    loadScript("function test(){alert(123);}");

     动态加载脚本文件时,涉及到一个加载结束后回调函数的问题

    在FF,Chrome,高版本IE(9+)中,script的Dom对象是支持onload和onerror方法的,但是IE7,IE8则不支持

    具体解决方式是利用onreadystatechange来监听文件加载状态的变化。

    script.onreadystatechange = function () {
        if (script.readyState == '某个值') {
            // do something
        }
    }

    此时 readyState 的值  可能为 以下几个 :

    • “uninitialized”  原始状态 
    • “loading”        下载数据中
    • “loaded”         下载完成
    • “interactive”    还未执行完毕
    • “complete”      脚本执行完毕

     整理之后 文件动态加载的方法如下

    //加载脚本文件
    function loadScriptFile(url, callback) {
        var script = document.createElement("script");
        script.src = url;
        script.type = "text/javascript";
        if (callback) {
            if ("onreadystatechange" in script) {
                script.onreadystatechange = function () {
                    if (/loaded|complete/.test(script.readyState))
                        callback();
                }
            } else {
                script.onload = callback;
            }
        }
        document.body.appendChild(script);
    }
    loadScriptFile("/Scripts/jquery.min.js", someFunction);

    部分内容引自 http://www.cnblogs.com/_franky/archive/2010/06/20/1761370.html

  • 相关阅读:
    两台独立计算机共享一套键鼠
    【不要太监,成为笑话】拼搏百天,我要成为程序员!键盘敲烂,我要月薪过万!第三天
    【不要太监,成为笑话】拼搏百天,我要成为程序员!键盘敲烂,我要月薪过万!第二天
    【不要太监,成为笑话】拼搏百天,我要成为程序员!键盘敲烂,我要月薪过万!第一天
    javac编译时报错 (错误: 编码GBK的不可映射字符)
    JavaWeb学习1-springMVC
    理学和工学的区别
    各种证书
    问题
    字符编码的理解
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/2701340.html
Copyright © 2011-2022 走看看