关于使用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 相关文章推荐
jQuery 页面载入进度条实现代码
Feb 08 Javascript
document.getElementById为空或不是对象的解决方法
Jan 24 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
Sep 18 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
Nov 05 Javascript
js实现的彩色方块飞舞奇幻效果
Jan 27 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
Aug 26 Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 Javascript
浅谈Node.js 子进程与应用场景
Jan 24 Javascript
layui对工具条进行选择性的显示方法
Sep 19 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
基于JavaScript实现留言板功能
Mar 16 Javascript
8个JS的reduce使用实例和reduce操作方式
Oct 05 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来写记数器(详细介绍)
2006/10/09 PHP
深入分析php之面向对象
2013/05/15 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
用js实现trim()的解决办法
2013/04/16 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
python实现二叉查找树实例代码
2018/02/08 Python
python迭代dict的key和value的方法
2018/07/06 Python
详解Python发送email的三种方式
2018/10/18 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
毕业生物理教师求职信
2013/10/17 职场文书
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
银行员工职业规划范文
2014/01/21 职场文书
教师职称自我鉴定
2014/02/12 职场文书
秘书英文求职信
2014/04/16 职场文书
安全环保标语
2014/06/09 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
费用申请报告范文
2015/05/15 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
python lambda 表达式形式分析
2022/04/03 Python
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers