addRule在firefox下的兼容写法

2016-02-19 11:47 12 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享addRule在firefox下的兼容写法的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - Web开发 】

现在用脚本控制 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
    h2ttttt/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
    h2ttttt/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

来源:https://www.tulaoshi.com/n/20160219/1598617.html

延伸阅读
标签: Web开发
IE8在默认情况下是使用全新的标准模式(Standard Mode)显示引擎来显示网页。 如果网页代码还没有标准化, 在IE8下可能会显示不正常。 重写网页代码使之标准化的工作量很大,需要长时间慢慢修复。 一个简单快捷的方法就是让IE8继续IE7的显示引擎来显示你的网站,我们称这个旧的显示引擎为兼容视图(Compatibility View) 。  在网页里面加...
标签: Web开发
使Firefox对XML的处理兼容IE的节点处理方法。具体代码列出如下。 具体代码如下。 ! DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" HTML HEAD TITLE   使firefox对xml的处理兼容IE的selectSingleNode selectNodes方法  / TITLE META  NAME ="Author"  CONTENT =...
标签: Web开发
在IE下,我们可以轻松使用以下代码来实现设置主页: a class="chlnk" style="cursor:hand;font-weight:bold;color:#004080;font-family:Verdana" HREF onClick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.devdao.com');"Click here to make devdao.com your default homepage!/a 然而...
标签: Web开发
在线编辑器在我们日常的项目开发中非常有用(如新闻系统),它可以方便地实现文章的在线编辑,省掉了FrontPage等工具。那么是怎样实现浏览器在线编辑功能的呢?  首先需要IE的支持,在IE5.5以后就有一个编辑状态. 就是利用这个编辑状态,然后用javascript来控制在线编辑的。       首先要有一个编辑...
标签: Web开发
早晨醒来突然想写一个画图函数,以前在网上看到有人做过,但都是用VML做的,只有ie支持。 偶这个是用div形成的绝对定位的点画出来的,兼容各种浏览器。 Untitled 1 .style1 { font-size: x-small; } [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

经验教程

460

收藏

76
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部