wv1124 发表于 2013-2-7 20:38:13

Javascript动态创建 style 节点(转)

原文:http://hi.baidu.com/goldenfree/blog/item/2b4e9842da9c821472f05ddf.html
有很多提供动态创建 style 节点的方法,但是大多数都仅限于外部的 css 文件。如何能使用程序生成的字符串动态创建 style 节点,我搞了2个小时。
静态外部 css 文件语法:
@import url(style.css);
动态外部 css 文件加载的方法有如下:
第一种:
var style = document.createElement(’link’);style.href = ’style.css’;style.rel = ’stylesheet’;style.type = ‘text/css’;document.getElementsByTagName(’HEAD’).item(0).appendChild(style);  
第二种简单:
document.createStyleSheet(style.css);
动态的 style 节点,使用程序生成的字符串:
var style = document.createElement(’style’);style.type = ‘text/css’;style.innerHTML=”body{ background-color:blue; }”;document.getElementsByTagName(’HEAD’).item(0).appendChild(style);  
很遗憾,上面的代码在 ff 里面成功,但是 ie 不支持。从老外论坛得到代码:
var sheet = document.createStyleSheet();sheet.addRule(’body’,'background-color:red’);  
成功,但是很麻烦,要把字符串拆开写,长一点的写死。
接着搜,在一个不知道什么国家的什么语言的 blog 上找到代码:
document.createStyleSheet(”javascript:’body{background-color:blue;’”); 成功,此人实在厉害,但是问题出来了,url 最大 255 个字符,长一点的就不行了,经过 SXPCrazy 提示,改成:
window.style=”body{background-color:blue;”;document.createStyleSheet(”javascript:style”);  
完美解决!!代码:(经本人测试IE6,FF3正常,IE7不支持,但也不报错)
<html><head><script>function blue(){    if(document.all){      window.style="body{background-color:blue;";      document.createStyleSheet("javascript:style");    }else{      var style = document.createElement('style');      style.type = 'text/css';      style.innerHTML="body{ background-color:blue }";      document.getElementsByTagName('HEAD').item(0).appendChild(style);    }}</script></head><body><input type="button" value="blue" /></body></html>  
页: [1]
查看完整版本: Javascript动态创建 style 节点(转)