JS如何获取元素样式?

作者: 前端王睿 | 来源:发表于2017-09-03 12:19 被阅读56次

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

一、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都快接近尾声,微软自己都早已放弃,我们何必继续再惯着那部分少量用户而折磨自己呢?

相关文章

  • 获取元素大小和位置的五种方式

    一、直接获取元素样式属性值 运用之前在JS如何获取元素样式?这篇文章中提到的三种获取元素样式方法便可获取元素大小和...

  • JS如何获取元素样式?

    上篇文章讲到如何设置元素样式,本文将继续给大家分享如何获取元素样式。 一、style,只获取标签上定义的行内样式 ...

  • dom操作css

    解决浏览器兼容,获取div样式 页面样式: 通过js修改元素样式: 读取样式: 读取正在显示样式: 语法:元素.c...

  • 事件相关

    如何批量操作 css 如何获取 DOM 计算后的样式 使用getComputedStyle获取元素计算后的样式 实...

  • 如何用js改变伪元素样式

    通常设置伪元素的样式直接用CSS很方便 可是有时候想用js动态的去改变伪元素的样式,但是js获取不到伪元素,这就很...

  • JS 获取元素的样式

    元素样式有几种形式,其中: 外部样式:HTML 中通过 标签引入的 CSS 文件样式。 内部样式:写在 HTM...

  • 原生js获取元素样式

    有时候我们要改变样式之前,需要先做条件判断,例如通过同一个按钮实现评论框的开关,这时我们就要先获取要操作的元素的C...

  • JS入门

    JS中如何获取元素 通过ID名称来获取元素 docuemnt.getElementById('link'); 事件...

  • selenium学习笔记9——selenium获取元素css中的

    获取元素的属性 获取元素css中的属性 如果元素A的color属性没有在标签中,而是在css样式中,如何获取? g...

  • jQuery篇之操作jQuery对象(样式)

    获取/设置 元素内容 获取/设置 元素属性 获取/设置 元素样式 获取/设置 元素位置和大小

网友评论

    本文标题:JS如何获取元素样式?

    本文链接:https://www.haomeiwen.com/subject/plwdjxtx.html