IE中网页引入CSS样式表的限制(2)

分类: CSS   出处:iocblog整理  更新时间:2009-04-12   添加到收藏  
[来源 www.iocblog.net]

//把style标签中的样式存入,然后删掉该标签,但保留第一个 [来源 www.iocblog.net]
//因为由getelementsbytagname方法返回值是nodelist,所以删除时循环用倒序
for(var i=astyle.length-1;i>-1;�i){
var o = astyle[i];
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.join(”);
}

  上面仅仅是一个简单的粗糙的解决方案,可以改进的地方还有:

  1、没有考虑media这个属性,如果有多个media应该分别合并,当然更没有考虑link标记的rel="alternate stylesheet"带来的影响。但我更建议通过@media指令把相应的样式写在同一个文件中,至少可以减少http连接数。

  2、没有解决@import指令31次限制的问题,其实可以提取其href值然后进行激活处理。但是实际应用在建议用link标记来替代@import指令,应为在ie中@import指令相当与把link标记写在文档的底部。

  3、一般来讲页面之所有出现大量的link或者style标签很可能有很多是相同的,可以在acsstext合并前除掉相同的项,减少代码量。

上一页 [1] [2]



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。