关于使用runtimeStyle属性问题讨论文章


Posted in Javascript onMarch 08, 2007

当我们在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埋下很严重的错误隐患。

Javascript 相关文章推荐
javascript中使用css需要注意的地方小结
Sep 01 Javascript
Javascript中的isNaN函数使用说明
Nov 10 Javascript
jquery实现带二级菜单的导航示例
Apr 28 Javascript
JavaScript跨平台的开源框架NativeScript
Mar 24 Javascript
Bootstrap表单布局
Jul 19 Javascript
js判断出两个字符串最大子串的函数实现方法
Nov 01 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
js实现横向拖拽导航条功能
Feb 17 Javascript
深入对Vue.js $watch方法的理解
Mar 20 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
一个简单的node.js界面实现方法
Jun 01 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
用js判断用户浏览器是否是XP SP2的IE6
Mar 08 #Javascript
在IE模态窗口中自由查看HTML源码的方法
Mar 08 #Javascript
encode脚本和normal脚本混用的问题与解决方法
Mar 08 #Javascript
IE7提供XMLHttpRequest对象为兼容
Mar 08 #Javascript
使用onbeforeunload属性后的副作用
Mar 08 #Javascript
HTML中不支持静态Expando的元素的问题
Mar 08 #Javascript
使用TextRange获取输入框中光标的位置的代码
Mar 08 #Javascript
You might like
php 缩略图实现函数代码
2011/06/23 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
php上传大文件设置方法
2016/04/14 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
在Python的web框架中配置app的教程
2015/04/30 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
python常用运维脚本实例小结
2020/02/14 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
工商管理系学生的自我评价分享
2013/11/29 职场文书
机械工程师岗位职责
2014/06/16 职场文书
读后感作文评语
2014/12/25 职场文书
投资合作意向书范本
2015/05/08 职场文书
法定授权委托证明书
2015/06/18 职场文书
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers
java实现面板之间切换功能
2022/06/10 Java/Android