上面用alert(document.styleSheets.length);测试一下,IE返回6,W3C游览器返回5。因此,否决了它。而且我们只用到style元素,不使用外联。第二部分的判定就针对head中的style元素而言,没有就创建一个。然后我们把CSS字符串加在第一个 style元素就行了。
接着我们要加把保险锁,因为当media="print"时,只在页面打印时,定义的效果才有效。为了防止第一个style元素的media值不是screen,我们得改一改。
var styleElement = styleElements[0];
var media = styleElement.getAttribute("media");
if(media != null && !/screen/.test(media.toLowerCase()) ){
styleElement.setAttribute("media", "screen");
}
附上media的一些说明。
* screen (缺省值),提交到计算机屏幕;
* print, 输出到打印机;
* projection,提交到投影机;
* aural,扬声器;
* braille,提交到凸字触觉感知设备;
* tty,电传打字机 (使用固定的字体);
* tv,电视机;
* all,所有输出设备。
最后是如此添加的问题。分IE,火狐与其他游览器三种。判定游览器也用各自的私有属性或方法。如styleSheet是IE独用的,getBoxObjectFor是火狐独用的(当然你也可以使用(/firefox /.test(navigator.userAgent.toLowerCase())),通常DOM操作是最耗时的,能用私有就用私有!
使用方法。
addSheet("\
.RTE_iframe{width:600px;height:300px;}\
.RTE_toolbar{width:600px;}\
.color_result{width:216px;}\
.color_view{width:110px;height:25px;}\
.color_code{text-align:center;font-weight:700;color:blue;font-size:16px;}\
div.table{width:176px;position:absolute;padding:1px;}\
div.table td{font-size:12px;color:red;text-align:center;}\
" );*/
对比一下51js的客服果果脚本,更短小,但是它会可能会创建多个style元素,还有一些效率的问题……毕竟我这个最初是为开发富文本编辑而开发的,功能不强大不行啊!
/*
动态添加样式表的规则
*/
iCSS={add:function(css){
var D=document,$=D.createElement('style');
$.setAttribute("type","text/css");
$.styleSheet&&($.styleSheet.cssText=css)||
$.appendChild(D.createTextNode(css));
D.getElementsByTagName('head')[0].appendChild($);
}};
iCSS.add("\
.dhoooListBox,.dhoooListBox li{margin:0;padding:0;list-style-type:none;font-size:12px;cursor:default}\
.dhoooListBox{border:1px solid #aaa;width:180px;background:#eee;height:200px;overflow:auto;float:left}\
.dhoooListBox li{margin:5px;line-height:24px;background:url(images/smilies/time.gif) no-repeat 0 60%;padding-left:25px;color:#555;}\
.dhoooListBox li.selected{background-color:#FFCC33}\
");
最后追加几个相关的方法:
var getClass = function(ele) {
return ele.className.replace(/\s+/,' ').split(' ');
};
var hasClass = function(ele,cls) {
return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
var addClass = function(ele,cls) {
if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
var removeClass = function(ele,cls) {
if (hasClass(ele,cls)) {
var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
ele.className=ele.className.replace(reg,' ');
}
}