欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS如何获取元素样式?

程序员文章站 2022-04-29 13:44:15
...

上篇文章讲到如何设置元素样式,本文将继续给大家分享如何获取元素样式。

一、style,只获取标签上定义的行内样式

在这里讲的style用法包括三个:style、style.cssText和style.getPropertyValue(),直接看个例子吧:

/*CSS*/
#box{ width: 200px; height: 200px; background-color: #0f0;}
<!--HTML-->
<div id="box" style="width: 100px; background-color: #f00;"></div>
//JavaScript
var box = document.getElementById("box");
console.log(box.style.cssText);  // "width: 100px; background-color: rgb(255, 0, 0);"
console.log(box.style.width);    // "100px"
console.log(box.style.height);    // ""
console.log(box.style.getPropertyValue('background-color'));  // "rgb(255, 0, 0)"

通过上面例子我们可以看出,通过这种方式只能获取行内样式,并不能获取到CSS样式表中的样式。

二、cssRules,只获取CSS样式表中定义的样式

接着上面的例子:

//JavaScript
var sheet = document.styleSheets[0];   // 获取页面中第一个样式表
var rules = sheet.cssRules;   // 获取页面中第一个样式表中定义的所有规则,rules[0]即代表第一条规则
console.log(rules[0].style.cssText);    // "width: 200px; height: 200px; background-color: rgb(0, 255, 0);"
console.log(rules[0].style.width);    // "200px"
console.log(rules[0].style.height);    // "200px"
console.log(rules[0].style.getPropertyValue('background-color'));    // "rgb(0, 255, 0)"

可以看出,用法其实与上面类似,只不过是主体变为rules[0]而不是box,所以只能获取到样式表中的样式,而并不能获取到行内样式。

三、getComputedStyle(),获取当前元素的计算样式

以上两种方式,都具有太强的针对性,不够灵活,因为获取到的样式可能并不是当前元素最终表现出来的样式。因此,如果想要获取所有样式表层叠而来的当前元素的样式,我们就要用到getComputedStyle()方法。

依然继续前面的例子:

console.log(getComputedStyle(box).cssText);    // 注意不仅仅只打印现有样式简单的叠加覆盖结果,而是还会有很多其他样式
console.log(getComputedStyle(box).width);    // "100px"
console.log(getComputedStyle(box).height);    // "200px"
console.log(getComputedStyle(box).getPropertyValue('background-color'));    // "rgb(255, 0, 0)"

很明显,用法还是和style类似,但是通常情况下使用这种方式获取到的样式才是我们真正所需要的。

兼容性:在IE8下,getPropertyValue()、cssRules和getComputedStyle()统统都不兼容,可以分别使用style.[属性名]、rules和currentStyle的方式替代,具体用法本文将不再说明,在此也希望其他开发者放弃兼容IE8及更早版本,如今2017都快接近尾声,微软自己都早已放弃,我们何必继续再惯着那部分少量用户而折磨自己呢?