关于使用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 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
JS实现Enter键跳转及控件获得焦点
Aug 12 Javascript
使用Javascript写的2048小游戏
Nov 25 Javascript
jQuery源码分析之sizzle选择器详解
Feb 13 Javascript
json的结构与遍历方法实例分析
Apr 25 Javascript
js和jquery中获取非行间样式
May 05 jQuery
vue better-scroll插件使用详解
Jan 25 Javascript
封装微信小程序http拦截器过程解析
Aug 13 Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 Javascript
Vue中通过vue-router实现命名视图的问题
Apr 23 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
May 26 Javascript
webpack4从0搭建组件库的实现
Nov 29 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常用编译参数中文说明
2014/09/27 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
Jquery Ajax请求代码(2)
2011/01/07 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
js实现一键复制功能
2017/03/16 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
python的keyword模块用法实例分析
2015/06/30 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
python中format函数如何使用
2020/06/22 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
市场营销求职信范文
2014/02/21 职场文书
村干部承诺书
2014/03/28 职场文书
学历公证委托书
2014/04/09 职场文书
一年级学生评语
2014/04/23 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
校长四风对照检查材料
2014/09/27 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
60句有关成长的名言
2019/09/04 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python