(转载)记录函数 getStyle() 获取元素 CSS 样式

时间:2022-05-22 20:57:24

设置元素(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&sol;获取元素样式&sol;封装自己的库

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

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

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

  9. JS获取元素CSS值

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

随机推荐

  1. jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等

    禁用鼠标右键菜单栏 $("body").bind("contextmenu", function(event) { return false; }); 禁用快捷 ...

  2. 浴室随想——RogueLike随想

    好玩的RogueLike 0 不同的追求 1 从追求中寻找商机 2 更的直接方法 3 我的追求 4 我的方法 5 好玩的RogueLike RogueLike游戏很好玩,因为你永远不知道接下来会发生什 ...

  3. C&num; 字符串格式化

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...

  4. 蓝牙BLE 架构剖析

    一.BLE架构概述: 二.各个层

  5. WebSockets基础

    网络套接字是下一代WEB应用程序双向通信技术,它是基于一个独立的socket并且需要客户端浏览器支持HTML5. 一旦你了解了网络套接字与WEB服务器的连接,你将可以从浏览器发送数据到服务器并且可以接 ...

  6. Ubuntu Server如何配置SFTP

    SH File Transfer Protocol是一个比普通FTP更为安全的文件传输协议.(参考资料:http://en.wikipedia.org/wiki/SSH_File_Transfer_P ...

  7. job interview

    一 , 7series clock 二, SDRAM comtroller (DDR) 4.熟悉DDR2/3协议或Ethernet相关协议,并有实际项目经验者优先: 三,AXI bus(AMBA) 四 ...

  8. PHP设计模式之:策略模式

    <?phpabstract class Strategy{    public abstract function AlgorithmInterface();} class ConcreteSt ...

  9. Android内存泄漏的各种原因详解

    转自:http://mobile.51cto.com/abased-406286.htm 1.资源对象没关闭造成的内存泄漏 描述: 资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我 ...

  10. 流程控制之if判断

    目录 语法(掌握) if if...else if...elif...else 练习(掌握) 练习1:成绩评判 练习2:模拟登录注册 if的嵌套(掌握) 语法(掌握) if判断是干什么的呢?if判断其 ...