addRule在firefox下的兼容写法
addRule在firefox下的兼容写法
发布时间:2016-12-30 来源:查字典编辑
摘要:现在用脚本控制html元素样式的方法真的很多很多。对单个元素可以直接element.style.display=......修改一个样式,也...

现在用脚本控制html元素样式的方法真的很多很多。

对单个元素可以直接element.style.display=......修改一个样式,也可以element.className=...修改它的多个样式。

对于多个元素修改样式可以用脚本直接importcss文件。

目前项目中有这么一个需求。要求改变某div下所有子孙结点的样式,但不改变div本身样式。

我当时想都没有想就留下了一下代码:

复制代码 代码如下:

<style>

span{background-color:blue;}

input{background-color:gray}

button{margin-top:70px;width:50px}

</style>

<->

<divid="a1">

divdiv

<span>

spanspan

<h2>ttttt</h2>

</span>

<input>

</div>

<buttononclick='document.styleSheets[0].addRule("#a1*","background-color:red")'>转</button>

这段代码一直工作得很好,直到有一天我同事告诉我,我的模块让他的浏览器崩溃了。

我打着手电筒,拿着放大镜在近两千多行的代码中找了又找。.

根本找不到问题出在哪里,而且当时对于上面的代码丝毫没有怀疑过。

我们div的id是从数据库里面直接读取的,为数字类型,比如<divid="345"></div>等等。

对于id能取什么字符,我以前在ie6和ff1.5中测试过,

复制代码 代码如下:

<divid="阿舜"></div>

<divid="???"></div>

<divid="-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>

<->

<divid="a1">

divdiv

<span>

spanspan

<h2>ttttt</h2>

</span>

<input>

</div>

<script>

functionf(){

varrule="#a1*{background-color:red}";

varindex=document.styleSheets[0].cssRules.length;

document.styleSheets[0].insertRule(rule,index);

}

</script>

<buttononclick=f()>转</button>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类