设置元素(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 样式的更多相关文章

  1. 获取元素CSS样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 转贴:获取元素CSS值之getComputedStyle方法熟悉

    获取元素CSS值之getComputedStyle方法熟悉 一.碎碎念~前言 我们都用过jQuery的CSS()方法,其底层运作就应用了getComputedStyle以及getPropertyVal ...

  3. 获取元素计算样式getComputedStyle()与currentStyle

    window.getComputedStyle()方法是标准化接口,返回一个对象,该对象在应用活动样式表并解析这些值可能包含的任何基本计算后报告元素的所有CSS属性的值. 私有的CSS属性值可以通过对 ...

  4. js兼容获取元素的样式

    js获取元素的样式的兼容性处理: function getStyle(obj,attr){ return obj.currentStyle?obj.currentStyle[attr]:getComp ...

  5. 利用getComputedStyle方法获取元素css的属性值

    在平时的工作中有时候会碰到需要获取元素当前样式的问题,查了一下可以用getComputedStyle这个方法来获取元素计算后的样式(有些我们在css里面没有写的,浏览器默认的样式也可以获得) getC ...

  6. js中获取元素的样式兼容性的写法

    1:设计元素的样式:el.style.color="red"||el.style["color"]="red"  获取元素的样式:el.st ...

  7. 函数return/获取元素样式/封装自己的库

    一:函数return <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&qu ...

  8. JS 获取元素、修改元素/css样式/标签属性、简单事件、数据类型

    基本使用 写在Script 标签里 引入外部js文件:<script src=" "></script> console.log(" " ...

  9. JS获取元素CSS值

    一.getComputedStyle getComputedStyle 是一个可以获取当前元素所有最终使用的CSS属性值.返回的是一个CSS样式声明对象([object CSSStyleDeclara ...

随机推荐

  1. iReport中求和的问题

    数据库取出值TAX_AMT,但是不想在数据库里面计算,太麻烦,后面group by 字段太多.那就放到ireport里面去计算咯 在字段的如下位置进行计算吧.

  2. LA 4975

    回文串的题,求最大的双重回文串: 重新复习了一下manacher算法: 代码: #include<cstdio> #include<cstring> #include<a ...

  3. codeforces C. No to Palindromes!

    http://codeforces.com/contest/465/problem/C 题意:给你一个字符串,然后按照字典序找出下一个字符串,这个字符串中不能含有长度大于等于2的子串为回文串,如果含有 ...

  4. PL/SQL拼接和使用绑定变量

    begin ..loop executeimmediate'insert into p1 values(' || i || ',' || i ||')'; commit; endloop; end; ...

  5. 【CF】244C Checkposts

    题目需要求啥很明确了.主要思想是先计算机联通块,然后每个块内找到一个最小值(以及该值的次数).最小值和结果1,次数乘积为结果2.联通块tarjan可解. /* 427C */ #include < ...

  6. gitweb安装

    gitweb安装: 1. 简介 Gitweb提供了git版本库的图形化web浏览功能.可以到网站http://git.kernel.org/体验下效果,如下图所示. Gitweb界面 它既可以通过配置 ...

  7. 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性

    初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...

  8. (转载)浅谈javascript的分号

    (转载)http://www.blueidea.com/tech/web/2009/7261.asp javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它 ...

  9. 使用doxygen生成注释文档

    1. doxygen下载地址:http://www.stack.nl/~dimitri/doxygen/ 2. 参考http://wenku.baidu.com/link?url=ETvBUyaR9f ...

  10. 【Objective-C基础教程-读书笔记】第1章 启程

    在第1章里面,作者主要以一种站在世界中心呼唤爱的姿态,给读者们打打鸡血洗洗脑,鼓励大家,投入时间学习Objective-C,值得啊! 首先,Objective-C既能用来开发OS X平台上的APP,又 ...