关于使用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 相关文章推荐
JS效率个人经验谈(8-15更新),加入range技巧
Jan 09 Javascript
firefox中用javascript实现鼠标位置的定位
Jun 17 Javascript
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
Sep 19 Javascript
为调试JavaScript添加输出窗口的代码
Feb 07 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
Dec 07 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
JavaScript中的setUTCDate()方法使用详解
Jun 11 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
May 15 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
AngularJs1.x自定义指令独立作用域的函数传入参数方法
Oct 09 Javascript
Layui表格监听行单双击事件讲解
Nov 14 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 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实现Ftp用户的在线管理的代码
2007/03/06 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
2016/10/30 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
详解python字节码
2018/02/07 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
设置python3为默认python的方法
2018/10/31 Python
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
自荐书范文
2013/12/08 职场文书
元宵晚会主持词
2014/03/25 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
区域经理岗位职责
2015/02/02 职场文书
员工自我工作评价
2015/03/06 职场文书
文明旅游倡议书
2015/04/28 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
Java中API的使用方法详情
2022/04/06 Java/Android
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技