(转载)记录函数 getStyle() 获取元素 CSS 样式
设置元素(element)的css属性值可以用element的style属性,例如要将element的背景色设置为黑色,可以这么做:
element.style.backgroundColor = '#000';
然而,很多时候我们在修改元素的样式之前要先保留元素原来的样式属性值,或许可以这么做:
var bc = element.style.backgroundColor;
这么做有可能获取到element元素的background-color属性值,但是,在多数情况下获取到的确实 'undefined',何解??
原因很简单,就是element.style只能获取到element的内联样式,而在一个设计良好的网页文件里,样式表一般是与文档结构分离开来以外部文件存在的。所以,仅仅用element.style不能如意地获取元素CSS样式!
那么,有什么方法可以获取外部样式吗?答案是:有的,不过存在 IE 与 W3C 的兼容问题!
在 IE 中,element 除了有 style 属性之外,还有一个 currentStyle 属性。currentStyle 的用法和 style 的用法一样,然而不同的是,currentStyle 如名字所示获取到的是 element 元素当前(所有的)样式:
var cbc = element.currentStyle.backgroundColor;//一定是元素当前的样式
var bc = element.style.backgroundColor;//多数情况下为undefined,囧...
好了,在 IE 下我们已经解决了获取外部样式的问题。然而,在 Firefox 等支持W3C DOM标准的浏览器却不支持currentStyle属性,所以只能另寻他方了。不用急,DOM也提供获取元素当前样式的,只不过稍稍麻烦一点点^_^
DOM提供了一个 getComputedStyle() 方法获取给定元素的样式表。这个函数有两个参数:第一个参数为需要获取样式的元素对象;第二个参数为伪元素,如:hover, :first-letter, :before等等,如果不需要伪元素则该参数为null。getComputedStyle()函数可以从 document.defaultView 对象中访问到,即可以这样调用该函数:
var cbc = document.defaultView.getComputedStyle(element,null).backgroundColor;
以上语句的作用就是获取 element 元素当前的 background-color 属性值。
getComputeStyle()函数的调用结果就是 element 元素的样式表,理应是一个对象。该对象还有一个方法:getPropertyValue()。该方法只有一个参数,即需要获取的样式的属性名,属性名与样式表中的形式相同,即背景色的属性名为 background-color,而非 backgroundColor。
好吧,以下开始定义getStyle()函数,或许分析完以下的代码段之后,可以对以上的解说更形象的理解。和以前一样,凡在标题开头带有'[JS库]'字样的文章都是为了充实我个人的 JS 库:pan,所以如果无法理解以下代码的编写形式,请先参阅之前的'[JS库]'相关博文:
(function(){
if(!window.pan){
window['pan']={};
}
//pan库中其它函数的定义,略
//
function getStyle(elem,styleName){
if(elem.style[styleName]){//内联样式
return elem.style[styleName];
}
else if(elem.currentStyle){//IE
return elem.currentStyle[styleName];
}
else if(document.defaultView && document.defaultView.getComputedStyle){//DOM
styleName = styleName.replace(/([A-Z])/g,'-$1').toLowerCase();
var s = document.defaultView.getComputedStyle(elem,'');
return s&&s.getPropertyValue(styleName);
}
else{//other,for example, Safari
return null;
}
}
window['pan']['getStyle'] = getStyle;
})();
需要说明的一点是,Safari不支持document.defaultView,所以以上函数获取元素外部样式不支持Safari浏览器。
这个函数的用法非常简单,传递两个参数:第一个参数为需要获取样式的元素对象;第二个参数为样式的属性名,属性名规则与style一致,即多个单词的属性名除了第一个单词外其它的均需首字母大写:
var cbc = pan.getStyle(element, 'backgroundColor');//获取背景色
var w = pan.getStyle(element, 'width');//获取宽度
var blw = pan.getStyle(element, 'borderLeftWidth');//获取左边框的宽度
好了,这个函数就写到这里,相信我已经将该函数的内部逻辑结构和用法都说明清楚了,呵呵,我的JS库又新添了一个函数了^_^
PS:该函数有待改进,如第一个参数可以不局限于传递元素对象。
原文地址:http://blog.sina.com.cn/s/blog_491997ee0100b13f.html
(转载)记录函数 getStyle() 获取元素 CSS 样式的更多相关文章
- 获取元素CSS样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 转贴:获取元素CSS值之getComputedStyle方法熟悉
获取元素CSS值之getComputedStyle方法熟悉 一.碎碎念~前言 我们都用过jQuery的CSS()方法,其底层运作就应用了getComputedStyle以及getPropertyVal ...
- 获取元素计算样式getComputedStyle()与currentStyle
window.getComputedStyle()方法是标准化接口,返回一个对象,该对象在应用活动样式表并解析这些值可能包含的任何基本计算后报告元素的所有CSS属性的值. 私有的CSS属性值可以通过对 ...
- js兼容获取元素的样式
js获取元素的样式的兼容性处理: function getStyle(obj,attr){ return obj.currentStyle?obj.currentStyle[attr]:getComp ...
- 利用getComputedStyle方法获取元素css的属性值
在平时的工作中有时候会碰到需要获取元素当前样式的问题,查了一下可以用getComputedStyle这个方法来获取元素计算后的样式(有些我们在css里面没有写的,浏览器默认的样式也可以获得) getC ...
- js中获取元素的样式兼容性的写法
1:设计元素的样式:el.style.color="red"||el.style["color"]="red" 获取元素的样式:el.st ...
- 函数return/获取元素样式/封装自己的库
一:函数return <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&qu ...
- JS 获取元素、修改元素/css样式/标签属性、简单事件、数据类型
基本使用 写在Script 标签里 引入外部js文件:<script src=" "></script> console.log(" " ...
- JS获取元素CSS值
一.getComputedStyle getComputedStyle 是一个可以获取当前元素所有最终使用的CSS属性值.返回的是一个CSS样式声明对象([object CSSStyleDeclara ...
随机推荐
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- bzoj 1503: [NOI2004]郁闷的出纳员 Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 6263 Solved: 2190[Submit][Statu ...
- Eclipse中Android公共库的正确建立及调用方法
Eclipse中Android公共库的正确建立及调用方法 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享 ...
- 11个显著提升 ASP.NET 应用程序性能的技巧——第1部分
[编者按]本文出自站外作者 Brij Bhushan Mishra ,Brij 是微软 MVP-ASP.NET/IIS.C# Corner MVP.CodeProject Insider,前 Code ...
- Android ToolBar详解
今年(2014) 的 google i/o 发表令多数人为之一亮的 material design,而 google 也从「google i/o 2014」 开始,大家也陆陆续续地看到其更新的 and ...
- 【长篇高能】ReactiveCocoa 和 MVVM 入门
翻译自ReactiveCocoa and MVVM, an Introduction. 文中引用的 Gist 可能无法显示.为了和谐社会, 请科学上网. MVC 任何一个正经开发过一阵子软件的人都熟悉 ...
- css3图片滤镜
http://www.zhanxin.info/development/2012-12-19-css-filter.html
- Parallel.Foreach的并发问题解决方法-比如爬虫WebClient
场景五:线程局部变量 Parallel.ForEach 提供了一个线程局部变量的重载,定义如下: public static ParallelLoopResult ForEach<TSource ...
- rails tutorial sample app
阅读第3章时,按照教程第一次运行rspec失败了: E:\05 Create\Code\temp\railstutorial\sample_app>rspec spec/requests/sta ...
- Nginx系列~负载均衡服务器与WWW服务器的实现
上两讲主要是关于Nginx的环境的介绍,没有涉及到真正环境的开发,这次我们以一个实现的例子,来说明一下负载均衡服务器与WWW服务器的Nginx是如何配置的,并最终如何实现的. 如下是一个实际场景,一台 ...