当前位置: 首页 > 图文教程 > 网络编程 > Javascript > addRule在firefox下的兼容写法

Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
javascript(jquery)利用函数修改全局变量的代码
JQuery 解析多维的Json数据格式
javascript 按回车键相应按钮提交事件
深入认识javascript中的eval函数
jquery tree 可编辑节点实现代码(jquery一句话节点菜单)
js window.onload 加载多个函数的方法
MAC官方菜单纯CSS实现灰色会换色
CSS Filter背景透明提示
CSS鼠标悬停菜单 图片交换技术实现
纯JS图片批量预加载技术代码
实用的层滑开js实现代码
jQuery get和post 方法传值注意事项
JQuery打造PHP的AJAX表单提交实例
Jquery AJAX 框架的使用方法
基于JQuery框架的AJAX实例代码
jquery ajax 检测用户注册时用户名是否存在
javascript 限制输入脚本大全
JavaScript window.setTimeout() 的详细用法
JavaScript 表格高亮类的应用[高级]

Javascript 中的 addRule在firefox下的兼容写法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 125 ::
收藏到网摘: n/a

现在用脚本控制 html 元素样式的方法真的很多很多。
对单个元素可以直接 element.style.display=......修改一个样式,也可以 element.className=...修改它的多个样式。
对于多个元素修改样式可以用脚本直接 import css文件。
目前项目中有这么一个需求。 要求改变某 div下所有子孙结点的样式,但不改变div本身样式。
我当时想都没有想就留下了一下代码:
复制代码 代码如下:

<style>
span{background-color:blue;}
input{background-color:gray}
button{margin-top:70px;width:50px}
</style>
<!-- by Go_Rush(阿舜) from http://ashun.cnblogs.com/ --->
<div id="a1">
divdiv
<span>
spanspan
<h2>ttttt</h2>
</span>
<input>
</div>
<button onclick='document.styleSheets[0].addRule("#a1 *","background-color:red")'>转</button>

这段代码一直工作得很好,直到有一天我同事告诉我,我的模块让他的浏览器崩溃了。
我打着手电筒,拿着放大镜在近两千多行的代码中找了又找。.
根本找不到问题出在哪里,而且当时对于上面的代码丝毫没有怀疑过。
我们div 的id 是从数据库里面直接读取的,为数字类型,比如 <div id="345"></div>等等。
对于id 能取什么字符,我以前在 ie6和 ff1.5中测试过,
复制代码 代码如下:

<div id="阿舜"></div>
<div id="???"></div>
<div id="-1"></div>
这样的id设置,都可以用
document.getElementById("阿舜")
document.getElementById("???"),
document.getElementById("-1"),
读出来不会有问题,更何况是纯数字呢.

最后经过反复调试,找到这个罪魁祸首 addRule.
document.styleSheets[0].addRule("#a1 *","background-color:red")
document.styleSheets[0].addRule("#123 *","background-color:red")
都没有任何问题
下面这行代码却会让ie死掉. 内存和虚拟内存一直暴涨,我512的内存,一下子xp就提示虚拟内存不够。
document.styleSheets[0].addRule("#-1 *","background-color:red");
同样,在 ff1.5中,将导致函数出错,但不会崩溃。
总结:
1。 ie,ff对 id 的取值相当宽容,id几乎可以是任何字符,中文,英文,字母,数字,负数,特殊字符
2。 但是 addRule 函数中, id为负数时,在 ie和ff都会失败,而且ie会崩溃。
附:
addRule在 ff中的兼容写法
复制代码 代码如下:

<style>
span{}{background-color:blue;}
input{}{background-color:gray}
button{}{margin-top:70px;width:50px}
</style>
<!-- by Go_Rush(阿舜) from http://ashun.cnblogs.com/ --->
<div id="a1">
divdiv
<span>
spanspan
<h2>ttttt</h2>
</span>
<input>
</div>
<script>
function f(){
var rule="#a1 *{background-color:red}";
var index=document.styleSheets[0].cssRules.length;
document.styleSheets[0].insertRule(rule, index);
}
</script>
<button onclick=f()>转</button>