当我们在IE中使用IE提供的DOM时,我们会发现关于style的相关属性有三个分组,它们分别是style、runtimeStyle和currentStyle。关于这个三种style的作用和基本用途,我曾经在这篇文章中有讲过,但随着越来越深入的使用,总算对怎么使用runtimeStyle属性有了一些自己的心得。

首先,runtimeStyle属性不是必需的,它的存在甚至远没有currentStyle有意义,因为由于IE布局、呈现原理限制,style属性里的定义,总有一些是无法和currentStyle同步的。什么意思呢?比如我们不设定TR元素的line-height或table-layout样式属性,我们是无法得到任意高度的表格行的,即使你费劲写上100个style="height: 1px",也是没有任何效果的。这时style的height虽然是1px,而currentStyle的height仍然是表格实际的高度。firefox不提供runtimeStyle和currentStyle,不知道它怎么解决这个不同步的问题?是不是会反向同步不能表现的style属性呢?

所以,runtimeStyle属性说白了就是用来锦上添花的,那么有没有只有使用runtimeStyle才能完成的功能或效果呢?要说有那也是自找的,比如本blog的Invert页面颜色功能,这个还真的是只有使用runtimeStyle属性才能做出来。除此之外,由于对runtimeStyle属性的设置不用同步到style,也不会同步,所以使用runtimeStyle修改元素的样式应该有更高的效率。不过这个不同步同时带来一个比较隐蔽的问题,如果我们总是操作dom,使用runtimeStyle和currentStyle是没有问题的,可是如果我们在实现中又穿插使用DHTML特性,比如读写innerHTML或读取outerHTML属性。这时不同步style的问题就出来了,不小心遇上回郁闷个半死的,因为程序不会有任何的运行错误,就是不管怎么弄都没有预期的效果。

总结一:runtimeStyle属性一定要配对使用,即element.runtimeStyle.xxx = 'attribue';和element.runtimeStyle.xxx = '';配对。如果可以明确的写出element.style.xxx = 'attribue1';和element.style.xxx = 'attribue2';,那么就没有什么必要使用runtimeStyle了。在同一个元素中混用style和runtimeStyle应该是一定要禁止的,由于style和runtimeStyle覆盖优先级不同,如果混用稍有不慎就会出一些莫名奇妙的问题,徒增debug的困扰和难度。

总结二:runtimeStyle属性不要在有innerHTML和outerHTML操作的编程环境中使用,否则不小心就会郁闷个半死。因为runtimeStyle的修改不会同步会html中的style里去,这个问题就会类似上面提到的同一元素中混用style和runtimeStyle的问题。

当然混用在首次实现的时候使用,程序员心里面其实是很清楚地,一般不会出什么大差错,可是这样的代码会给后期的debug以及update埋下很严重的错误隐患。

转载于:https://www.cnblogs.com/birdshome/archive/2006/04/24/runtimeStyle.html

关于使用runtimeStyle属性问题讨论相关推荐

  1. 关于Python类属性与实例属性的讨论

    标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...

  2. View 的 android:visibility属性的讨论

    Android VIEW 中的 visibility 属性,在API中的描述为:Controls the initial visibility of the view. [控制VIEW的初始可见性]. ...

  3. ext-js 中 Ext.data.Model 的 phantom 属性的讨论

    我使用的extjs版本是4.1.0 ,在Ext.data.Model中, 有一个属性叫phantom,平时不太用到,也没多注意,直到这2天我们team一个js专家遇到一个很棘手的问题,这才触发我去窥测 ...

  4. 最亲密接触DhtmlJScript开发细节

        本文只是一个入口,它分类整理了从2004年底到今天接近两年的时间里,我在DHtml&JScript开发领域学习.研究,以及所遇到和已解决的相关开发问题.总文章数超过了150篇,以此作为 ...

  5. JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布

    研究了一年多的js,也差不多写一个自己的js库了. 我写这个不算框架,只是一个小型的js工具库,所以我用的名字是Library. 主要集合了我写js时一些常用的方法,并参考了prototype.js, ...

  6. CJL.0.1.min.js 的是一个什么JS库

    这个工具库的主要特点是: [跨浏览器]  能在以下浏览器使用:IE6,IE7,IE8,Firefox 3.5.3,Chrome 3.0,Safari 4.0.3,Opera 10.10  ie系列是必 ...

  7. 无法获取未定义或 null 引用的属性“text”_【CSS】是时候开始用 CSS 自定义属性了...

    自定义属性(有时候也被称作CSS变量或者级联变量)是由CSS作者定义的,它包含的值可以在整个文档中重复使用.由自定义属性标记设定值(比如:--main-color: black;),由var() 函数 ...

  8. 使用C#中的反射从字符串获取属性值

    我正在尝试在代码中使用Reflection 1示例实现数据转换 . GetSourceValue函数具有比较各种类型的开关,但是我想删除这些类型和属性,并让GetSourceValue仅使用单个字符串 ...

  9. oracle 经纬度的数据类型,4.2 SDO_GEOMETRY类型、属性和值

    图4-4世界地图的例子,国家的形状和之间的距离都发生了扭曲 怎样才能在没有错误和扭曲的情况下,表示地球表面上的位置呢?在好几个世纪里,这对于很多的地理学家.数学家和发明家都是一个挑战.有好几本书都对这 ...

最新文章

  1. JavaScript 运行机制详解
  2. java堆外内存6_Java堆外内存排查小结
  3. 电脑管家离线安装包_二号线、南延线TVM病毒客户端离线处理方法
  4. 聚数引智,承德大数据产业对接交流会将于2019中国国际数字经济博览会期间召开...
  5. mysql读写分离-借助中间键mycat
  6. Java 计算数学表达式(字符串解析求值工具)
  7. android 高德amap开发二(地图操作)
  8. 黑马程序员最新版JavaWeb综合案例(前后端完整版)
  9. ad7606中文资料_AD7606-6 pdf,AD7606-6中文资料,AD7606-6应用电路-华秋商城
  10. 使用SINet进行伪装目标检测
  11. 计算机的了解以及组装
  12. python django 基本测试 及调试 201812
  13. PAT乙级——1034(模拟四则运算)
  14. 图像处理之opencv图片几何变化操作大全
  15. 图片的质量压缩和二次采样
  16. 大尺寸图片的性能和内存优化
  17. 最高效的学习方法——逆向学习法
  18. 解决vps上的ssh掉线------tmux
  19. 简单的汉字加密-java
  20. 牛客多校第五场7月31日补题记录

热门文章

  1. linux交叉编译出现的问题,,Ubuntu 14.10下安装GCC交叉编译器遇到问题及解决方法
  2. php 辅助函数,辅助函数 - Laravel 5.8 中文文档手册 - php中文网手册
  3. jsp页面 字体颜色 白色_CSS 文本字体颜色(CSS color)
  4. Python发送POST request payload形式的请求
  5. tomcat ---- 常用服务器
  6. unity ab包加载_Unity资源管理和打包
  7. mysql mssql 性能对比_MySQL最新版8.0与5.7之性能对比,看看它是如何改进的
  8. springcloud五大组件?注解_spring cloud实现简单的微服务架构
  9. List的Stream流操作
  10. SpringBoot使用GZIP压缩返回数据