博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSSOM之getComputedStyle,currentStyle,getPropertyValue,getAttribute
阅读量:5279 次
发布时间:2019-06-14

本文共 2193 字,大约阅读时间需要 7 分钟。

js关于CSSOM编程的样式相关几个常用的方法

webkit:getComputedStyle,getPropertyValue

IE:currentStyle,getAttribute

前言

jquery 中的 css() 方法,其底层运用的就是 getComputedStyle,getPropertyValue 方法。

getComputedStyle

getComputedStyle 是一个可以获取当前元素所有最终使用的css属性值的方法。返回一个CSSStyleDeclaretion 实例的对象。只读

语法如下:

var style = window.getComputedStyle("元素", "伪类");

例如:

var dom = document.getElementById("test"),    style = window.getComputedStyle(dom , ":after");

getComputedStyle与style的区别

我们使用element.style也可以获取元素的CSS样式声明对象,但是其与getComputedStyle方法还有有一些差异的。

1.element.style 属性可读可写

2.getComputedStyle 返回的是元素最终的样式,而element.style 只是style属性的值

注意:getComputedStyle 方法在 window ,和document.defaultView 上

window.getComputedStyle===document.defaultView.getComputedStyle  返回True.

getComputedStyle与currentStyle

currentStyle是IE浏览器自娱自乐的一个属性,其与element.style可以说是近亲,至少在使用形式上类似,element.currentStyle,差别在于element.currentStyle返回的是元素当前应用的最终CSS属性值(包括外链CSS文件,页面中嵌入的<style>属性等)。

因此,从作用上将,getComputedStyle方法与currentStyle属性走的很近,形式上则stylecurrentStyle走的近。不过,currentStyle属性貌似不支持伪类样式获取,这是与getComputedStyle方法的差异,也是jQuery css()方法无法体现的一点。

getPropertyValue

getPropertyValue方法可以获取CSS样式申明对象上的属性值(直接属性名称),例如:

window.getComputedStyle(element, null).getPropertyValue("float");

  

如果我们不使用getPropertyValue方法,直接使用键值访问,其实也是可以的。但是,比如这里的的float,如果使用键值访问,则不能直接使用getComputedStyle(element, null).float,而应该是cssFloatstyleFloat,自然需要浏览器判断了,比较折腾!

使用getPropertyValue方法不必可以驼峰书写形式(不支持驼峰写法),例如:style.getPropertyValue("border-top-left-radius");

兼容性

getPropertyValue方法IE9+以及其他现代浏览器都支持,

OK,一涉及到兼容性问题(IE6-8肿么办),感觉头开始微微作痛了~~,不急,IE自由一套自己的套路,就是getAttribute方法

getPropertyValue和getAttribute

在老的IE浏览器(包括最新的),getAttribute方法提供了与getPropertyValue方法类似的功能,可以访问CSS样式对象的属性。用法与getPropertyValue类似:

style.getAttribute("float");

 

综上,获取元素的兼容性样式:

var oButton = document.getElementById("button");if (oButton) {    oButton.onclick = function() {        var oStyle = this.currentStyle? this.currentStyle : window.getComputedStyle(this, null);        if (oStyle.getPropertyValue) {            alert("getPropertyValue下背景色:" + oStyle.getPropertyValue("background-color"));        } else {            alert("getAttribute下背景色:" + oStyle.getAttribute("backgroundColor"));        }    };}

 

转载于:https://www.cnblogs.com/btgyoyo/p/6159697.html

你可能感兴趣的文章
06享元、责任链
查看>>
ubuntu如何部署tftp服务
查看>>
【Alpha版本】冲刺阶段——Day 8
查看>>
解决CentOS6.x或RedHat Linux 6.x版本不能通过System eth0以固定IP访问外网的问题
查看>>
(转)Expression Tree不完全入门
查看>>
Struts2的工作原理
查看>>
配置EditPlus使其可以编译运行java程序
查看>>
我眼中的Android IDE
查看>>
C++默认参数值函数
查看>>
java中的占位符\t\n\r\f
查看>>
7.14
查看>>
SDN2017 第一次作业
查看>>
MySQL通过frm 和 ibd 恢复数据过程
查看>>
AngularJs 学习笔记(2)
查看>>
关于元素优先级
查看>>
oo第一单元作业总结
查看>>
SRS源码——Listener
查看>>
web.xml 4.0 头
查看>>
Java面向对象抽象类案例分析
查看>>
100.Same Tree
查看>>