IE有 style、runtimeStyle和currentStyle,FF没有runtimeStyle和currentStyle
当我们在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中,`style`, `currentStyle`, 和 `runtimeStyle` 是用于操作和查询HTML元素样式的三个重要属性。它们各自有不同的特性...理解和掌握这三个属性的差异对于动态调整网页样式和解决样式优先级问题至关重要。
为了解决这个问题,可以使用currentStyle属性在IE浏览器中获取元素的所有样式(包括外部和嵌入样式),但如文件所述,currentStyle属性在Firefox浏览器中是不支持的。这是一个浏览器兼容性问题。为了解决兼容性问题...
- `element_prototype_get_runtimeStyle()`、`window_prototype_get_event()` 和 `event_prototype_get_srcElement()` 是用来模拟 `runtimeStyle`、`event` 和 `srcElement` 属性的。 6. **事件监听器** - Fire...
`Style.letterSpacing`和`runtimeStyle.letterSpacing`可以调整字符间距。 `<body background="clouds.gif">`设置背景图片,`<b>`标签用于创建粗体文本,`<hr>`标签生成直线。`window.setTimeout()`用于延迟执行...
在IE6/7/8中,可以使用elem.runtimeStyle配合pixelLeft来进行像素化处理,而在现代浏览器中,可以使用width属性处理。 - 在Webkit核心的浏览器中,margin-right经常会出错。 三、查询操作 查询操作指的是通过特定...
根据提供的标题、描述以及部分代码内容,我们可以了解到这篇文章主要探讨的是如何通过CSS来改变HTML中的`<select>`元素样式的问题。通常来说,`<select>`元素的样式很难仅通过CSS来完全自定义,因为它是浏览器默认...
不过需要注意的是,`__defineGetter__`在现代浏览器中已经被更先进的`Object.defineProperty`所取代,因此在最新的代码中,应考虑使用后者进行更安全和灵活的属性定义。 总之,处理Firefox中的事件对象,我们需要...
本篇文章将详细介绍如何通过一些技巧和方法,让IE6也能识别并应用CSS3的圆角效果。 `border-radius`属性是CSS3中的一项重要特性,它允许开发者为元素的边框添加圆角,无需再依赖图像来实现这一效果。在现代浏览器中...
expression(this.runtimeStyle.backgroundImage = 'none', this.runtimeStyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + src + '\',sizingMethod=\'scale\')'); } ``` 这里的`ie...
此外,文章还提到了Microsoft官方网站也采用了Fancybox,这说明Fancybox的性能和可用性受到了广泛认可,可以放心在项目中使用。 总之,Fancybox是一个功能强大且灵活的Jquery弹出窗口插件,虽然在IE中可能会遇到...
今天,我们将讨论如何使用 HTML 和 CSS 实现超级简单的图片防盗技术。 一、图片防盗的必要性 在互联网时代,图片盗用和盗链问题变得越来越严重。图片盗用和盗链不仅会给网站和个人用户带来经济损失,还会导致知识...
当`runtimeStyle`的属性值与`style`属性冲突时,`runtimeStyle`的值会覆盖`style`。但`runtimeStyle`在其他浏览器中并不支持,因此在编写跨浏览器的代码时,一般不建议使用。 总的来说,`style`用于直接操作内联...
本篇文章将深入探讨如何解决IE6下PNG背景透明的问题,以及提供相关的解决方案。 1. **PNG格式与透明度** - PNG8支持256色及简单的透明效果,适用于小图标和色彩较少的设计。 - PNG24则支持24位真彩色,同时提供...
5. **元素样式的内部表示**:在IE浏览器中,元素的运行时样式是通过`runtimeStyle`属性表示的,而`currentStyle`属性结合了`runtimeStyle`和`style`属性。在标准模式下,`currentStyle`代表了应用在元素上的样式规则...
- 程序中使用了一种技巧,通过设置`body`的背景为`fixed`,并利用`expression`属性来实现IE6下的相对窗口定位。 - 创建一个定位层,该层的大小与窗口相同,并且与窗口的位置重合。其他元素相对于这个定位层定位,...
- **动态样式修改**:通过修改元素的`runtimeStyle.cssText`属性来改变选中项的背景图片、颜色等样式。 - **日期选择逻辑**:当用户双击某个日期时,会更新当前选中的日期,并将这个日期按照预先设置的格式返回给...
25. **runtimeStyle**:允许动态修改元素的样式。 26. **scopeName**:定义元素的作用域名称。 27. **scrollHeight/scrollWidth**:元素的滚动高度和宽度。 28. **style**:元素的内联样式。 29. **tabIndex**:元素...