关于使用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中valueOf函数与toString方法深入理解
Dec 02 Javascript
JavaScript整除运算函数ceil和floor的区别分析
Apr 14 Javascript
JavaScript中的函数(二)
Dec 23 Javascript
浅析Ajax语法
Dec 05 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
Feb 18 Javascript
js实现延迟加载的几种方法
Apr 24 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
Jul 20 Javascript
基于JS递归函数细化认识及实用实例(推荐)
Aug 07 Javascript
深入浅析JavaScript中的RegExp对象
Sep 18 Javascript
使用vue实现grid-layout功能实例代码
Jan 05 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
JS document form表单元素操作完整示例
Jan 13 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&mysql(一)
2006/10/09 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
Python中time模块和datetime模块的用法示例
2016/02/28 Python
简述Python中的进程、线程、协程
2016/03/18 Python
使用python实现简单五子棋游戏
2019/06/18 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
大学老师推荐信
2014/02/25 职场文书
村级四风对照检查材料
2014/08/24 职场文书
车辆年审委托书范本
2014/09/18 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
MySQL 原理与优化之Update 优化
2022/08/14 MySQL
Go gorilla/sessions库安装使用
2022/08/14 Golang