关于使用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检测函数
May 31 Javascript
解决jquery的datepicker的本地化以及Today问题
May 23 Javascript
JavaScript新窗口与子窗口传值详解
Feb 11 Javascript
JsRender for index循环索引用法详解
Oct 31 Javascript
Javascript获取表单名称(name)的方法
Apr 02 Javascript
jquery实现的用户注册表单提示操作效果代码分享
Aug 28 Javascript
用js实现简单算法的实例代码
Sep 24 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
Nov 25 Javascript
JavaScript函数参数的传递方式详解
Mar 06 Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 Javascript
详解JQuery基础动画操作
Apr 12 jQuery
vue全屏事件开发详解
Jun 17 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
一个oracle+PHP的查询的例子
2006/10/09 PHP
PHP多进程编程实例
2014/10/15 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
python同时给两个收件人发送邮件的方法
2015/04/30 Python
手把手教你python实现SVM算法
2017/12/27 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
python中的json总结
2018/10/11 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
final, finally, finalize的区别
2012/03/01 面试题
高一家长会邀请函
2014/01/12 职场文书
会计专业自我鉴定
2014/02/10 职场文书
中式结婚主持词
2014/03/14 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
督导岗位职责
2015/02/04 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
催款律师函范文
2015/05/27 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
初中政治教学工作总结
2015/08/13 职场文书
培训心得体会怎么写
2016/01/25 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书