壹 ❀ 引

我们知道书写css有三种做法,它们分别是行内样式,内嵌样式和外部引用。我们来看个例子,下面这个div分别通过内部样式添加了颜色,内嵌样式添加了字体大小,外部引入样式添加了宽度。

<!-- 行内样式 -->
<div style="color: red;">听风是风</div>
<!-- 内嵌样式 -->
<style>
div {
font-size: 24px;
}
</style>
<!-- 外部引入 -->
<link rel="stylesheet" href="style/demo.css">
/* demo.css */
div{
width: 100px;
}

现在我们来尝试获取这个div的样式,使用JavaScript写法:

let div = document.querySelector("div");
console.log(div.style.color);//red
console.log(div.style.fontSize);//空
console.log(div.style.width);//空

事实证明,通过style属性只能访问到行内样式,内嵌以及外部引用都无法读取,怎么办呢?我们可以使用 getComputedStyle 方法。

 贰 ❀ 解决方案

还是上面的例子,我们使用getComputedStyle方法,直接上代码:

let div = document.querySelector("div");
let style = window.getComputedStyle(div, null);
console.log(style['color']); //rgb(255, 0, 0)
console.log(style['fontSize']); //24px
console.log(style['width']); //100px

看,不管以何种方式设置的样式,getComputedStyle方法都能轻松帮你拿到,这个方法是个什么意思呢?我们来说说这个方法。

 叁 ❀ 关于getComputedStyle方法

一个完整的getComputedStyle方法其实是这样:

let style = window.getComputedStyle(element, [pseudoElt]);

其中 element 是你需要获取style 的元素;我们知道元素能通过after与before设置伪元素(注意是伪元素不是伪类),pseudoElt就是用于获取伪元素样式,如果不需要请将此参数设置为null。返回的style是一个属性键值对的合集,是一个对象,我们可以通过属性名直接访问对应的值,或者通过 getPropertyValue 方法获取,我们来看一个带有伪元素的例子:

<input type="text" class="demo">
/* demo.css */
input {
outline: none;
border: 1px solid #ddd;
} input::after {
content: "";
border: 2px solid #e4393c;
}
var input = document.querySelector(".demo");
var border = window.getComputedStyle(input, null)['border'];
console.log(border); //1px solid rgb(221, 221, 221)
//等同于
var border = window.getComputedStyle(input, null).getPropertyValue("border");
console.log(border); //1px solid rgb(221, 221, 221) //获取伪元素
var border = window.getComputedStyle(input, '::after')['border'];
console.log(border); //2px solid rgb(228, 57, 60)
//等同于
var border = window.getComputedStyle(input, '::after').getPropertyValue("border");
console.log(border); //2px solid rgb(228, 57, 60)

我们来看看此方法的兼容性:

兼容性非常优秀,IE都完美兼容到了9以上,可能有人就要问了,要是我低版本IE也要获取非行内样式怎么办?其实早版本的IE也有专门提供一个属性 currentStyle,它的使用是这样:

var style = element.currentStyle[prop];

此属性的兼容性如下图:

可以看到从兼容性来说,这两个属性方法完美的互补了IE兼容情况,注意,如果不考虑低版本IE,请直接使用 getComputedStyle 方法。

 肆 ❀ 一个通用样式获取/设置方法

直接上代码:

/**
* @desc 一个用于设置和获取css样式的方法
* @param {*} ele element元素
* @param {*} prop 样式名
* @param {*} val 样式值
*/
function css(ele, prop, val) {
if (val) {
// 设置css属性
ele.style[prop] = val;
} else {
// 兼容低版本IE
if (ele.currentStyle) {
return ele.currentStyle[prop];
} else {
return window.getComputedStyle(ele, null)[prop];
};
};
};

那么关于获取非行内样式就说到这里了,还有一小时跨年,新年快乐。2020年也要加油!

js 获取css非行内样式,你应该了解的getComputedStyle方法的更多相关文章

  1. 原生js获取元素非行内样式属性的方法

    获取当前对象的样式DOM标准中的全局方法 getComputedStyle(obj).width (获取元素的宽度),但在非标准IE浏览器(IE8)以下有兼容问题IE8以下要这样写 obj.curre ...

  2. js获取css的各种样式并且设置他们

    js原生获取css样式,并且设置,看似简单,其实并不简单,我们平时用的ele.style.样式,只能获取内嵌的样式,但是我们写的样式基本都在style属性里面; 这里我们就需要: 下面这个代码主要是设 ...

  3. js获取css中的样式

    众所周知,obj.style只能够获取 <div id="a" style="width:100px;"></div> 结构上的样式 如 ...

  4. js获取非行内样式

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. js获取css样式方法

    一.CSS样式共有三种:内联样式(行间样式).内部样式.外部样式(链接式和导入式) <div id="a" style="width: 100px;height: ...

  6. 关于js通过修改行内样式来修改元素样式

    关于js通过修改行内样式来修改元素样式 1.当我们通过使用js来修改html元素的样式时,使用的方法是为元素添加行内样式, 此时的js样式是生效的,因为行内样式优先级高于类名 2.如果已有同属性的行内 ...

  7. .NET前后台-JS获取/设置iframe内对象元素并进行数据处理

    转载请注明出处:果冻栋吖 这个主要是修改H3BPM一个批量审批的功能时候做的.先看下图: H3自带了批量审批的功能,也就是按钮1,有审批意见3,但是如果3里边不填写内容点击1之后,效果就是表单里边没有 ...

  8. js获取url的参数和值的N种有效方法

    js获取url的参数和值的N种有效方法 function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[" ...

  9. JS获取子节点、父节点和兄弟节点的方法实例总结

    转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...

  10. 【总结整理】js获取css的属性(内部,外部,内嵌(写在tag中))

    在JS中需要获取某个元素的宽高或者是绝对定位的位置信息,通常我们会这么写: var elemWidth = elem.style.width; console.log(elemWidth); //(空 ...

随机推荐

  1. Vue第六篇 element-ui 项目管理工具npm webpack 启Vue项目vue-cli

    node npm npm管理项目 npm init -y npm install xxxx@0.0.0 npm uninstall xxx npm i 下载package.json所有的依赖 webp ...

  2. C++ ——vector数组笔记

    vector 是 C++ 标准库中的一个动态数组容器(Sequence Container),它可以自动管理内存大小,可以在运行时根据需要动态增长或缩小.它是一个非常常用且强大的容器,用于存储一系列元 ...

  3. Asp.Net Core造轮之旅:逐步构建自己的开发框架-目录

    本系列适用于已有一定.NET开发基础,学习asp.net core人士. 基础篇 asp.net core之Startup asp.net core之依赖注入 asp.net core之中间件 asp ...

  4. 07-verilog & sytem verilog

    一.数据类型 二值逻辑变量 bit 不赋值的时候,变量初始默认为0 x或z的值会转变为0 bit vector--bit矢量 bit [msb,lsb] variable_name = [initia ...

  5. Redis-有序集合-zset

  6. Go-强制类型转换-T(x)

    类型转换 T(x) 具有相同的底层类型 数字类型之间可以互相转换(int系 uint系 float系),较大数转换成较小数会损失精度 字符串与切片之间的转换 string <==> []r ...

  7. [转帖]清除掉shared pool中某条sql语句方法

    https://www.xifenfei.com/2012/02/%E6%B8%85%E9%99%A4%E6%8E%89shared-pool%E4%B8%AD%E6%9F%90%E6%9D%A1sq ...

  8. [转帖]Web技术(六):QUIC 是如何解决TCP 性能瓶颈的?

    文章目录 一.QUIC 如何解决TCP的队头阻塞问题? 1.1 TCP 为何会有队头阻塞问题 1.2 QUIC 如何解决队头阻塞问题 1.3 QUIC 没有队头阻塞的多路复用 二.QUIC 如何优化T ...

  9. [转帖]nginx配置默认首页(index.html index.htm)全流程(包含遇到问题的解决)

    https://www.cnblogs.com/tujietg/p/10753041.html#:~:text=%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%9 ...

  10. [转帖]dd - Linux世界中的搬运工

    <存储工具系列文章>主要介绍存储相关的测试和调试工具,包括不限于dd.fio.vdbench.iozone.iometer.cosbench等性能负载工具,及strace等调试工具. dd ...