• 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

  • 相关阅读:
    前端性能优化-基础认知
    AngularJS表单验证开发案例
    信息无缝滚动效果marquee
    好用的切换滑动焦点图框架jquery.superslide
    jQuery核心探究
    焦点图轮播图原理与机制
    删除数组中指定的某个元素
    伪响应式开发(PC和Mobile分离)
    18丨CentOS:操作系统级监控及常用计数器解析(下)
    17丨CentOS:操作系统级监控及常用计数器解析
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/2701340.html
Copyright © 2020-2023  润新知