关于使用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 相关文章推荐
CSDN轮换广告图片轮换效果
Mar 27 Javascript
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
Javascript获取当前时间函数和时间操作小结
Oct 01 Javascript
DOM基础教程之事件对象
Jan 20 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
Aug 02 Javascript
JavaScript利用Date实现简单的倒计时实例
Jan 12 Javascript
AngularJS表格添加序号的方法
Mar 03 Javascript
详解Vue 非父子组件通信方法(非Vuex)
May 24 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
vue项目关闭eslint校验
Mar 21 Javascript
微信小程序实现弹出菜单功能
Jun 12 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
实用函数8
2007/11/08 PHP
PHP PDO函数库详解
2010/04/27 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
家长评语大全
2014/01/22 职场文书
班级标语大全
2014/06/21 职场文书
真诚的求职信
2014/07/04 职场文书