关于使用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实现仿银行密码输入框效果的代码
Dec 13 Javascript
asm.js使用示例代码
Nov 28 Javascript
JavaScript中使用arguments获得函数传参个数实例
Aug 27 Javascript
jQuery切换所有复选框选中状态的方法
Jul 02 Javascript
JavaScript数据类型学习笔记
Jan 25 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
vue父组件异步获取数据传给子组件的方法
Jul 26 Javascript
vue-cli3搭建项目的详细步骤
Dec 05 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
Sep 23 Javascript
解决vant title-active-color与title-inactive-color不生效问题
Nov 03 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写的采集程序
2007/03/16 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
React优化子组件render的使用
2019/05/12 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
Python内建模块struct实例详解
2018/02/02 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
Python新手学习标准库模块命名
2020/05/29 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
活动总结新闻稿
2014/08/30 职场文书
仰望星空观后感
2015/06/10 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书