IE浏览器加载style标签不能超过31的解决方案

来源:互联网 发布:苹果手机闹钟软件 编辑:程序博客网 时间:2024/05/04 23:15
var fnMergeStyleSheet = function(){if(!document.styleSheets){return;}var aSheet = document.styleSheets,    aStyle = document.getElementsByTagName('style'),    aLink  = document.getElementsByTagName('link');    if(aStyle.length + aLink.length < 32 || !aSheet[0].cssText){        //document.styleSheets.cssText 只有IE支持         return;    }    var aCssText = [],aCloneLink = [];    //把style标签中的样式存入,然后删掉该标签,但保留第一个    //因为由getElementsByTagName方法返回值是nodeList,所以删除时循环用倒序    for(var i=aStyle.length-1;i>-1;--i){        var o = aStyle[i];//document.getElementById("a").innerHTML +=i+":"+o.innerHTML+"<br>";             aCssText.push(o.innerHTML);            if(i>0){                o.parentNode.removeChild(o);            }    }    //在IE中只有在31之内的link标签才能通过其styleSheet.cssText获取样式    //无法的获取复制到一个数组aCloneLink中    for(var i=aLink.length-1;i>-1;--i){       var o = aLink[i];          if(o.getAttribute && o.getAttribute('rel')==='stylesheet'){               if(o.styleSheet){                  aCssText.push(o.styleSheet.cssText);               }else{                   aCloneLink.push(o.cloneNode(true));               }               if(i>0){                   o.parentNode.removeChild(o);               }          }    }    var oHead = document.getElementsByTagName('head')[0];    //通过前面的删除,前31个link或者style标记最多只剩下2个    //通过重新增加link节点的方法激活其styleSheet属性,从而获取样式    for(var i = aCloneLink.length-1;i>-1;--i){        var o = aCloneLink[i];        oHead.appendChild(o);        aCssText.push(o.styleSheet.cssText);        oHead.removeChild(o);    }   //把所有的样式都复制给第一个标签    aSheet[0].cssText += aCssText.reverse().join('');}fnMergeStyleSheet();
把这段东西加上尾部。
0 0
原创粉丝点击