壹 ❀ 引

我们知道书写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. Kubernetes: client-go 源码剖析(二)

    kubernetes:client-go 系列文章: Kubernetes: client-go 源码剖析(一) Kubernetes: client-go 源码剖析(二) 2.3 运行 inform ...

  2. 【ArgParse】一个开源的入参解析库

    项目地址:argtable3 本地验证: 编译构建 新增验证 // examples/skull.c #include "argtable3.h" int main(int arg ...

  3. python环境 anaconda安装

    官网: https://www.anaconda.com/distribution/#macos 国内镜像: https://mirrors.tuna.tsinghua.edu.cn/anaconda ...

  4. [转帖]JVM相关 - StackOverflowError 与 OutOfMemoryError

    https://zhuanlan.zhihu.com/p/265039643   7 人赞同了该文章 本文基于 Java 15 StackOverflowError 与 OutOfMemoryErro ...

  5. [转帖]如何使用 minio 进行 BR 备份

    https://tidb.net/blog/ada69456#5.%20%E4%BD%BF%E7%94%A8%20minio%20%E8%BF%9B%E8%A1%8C%20BR%20%E5%A4%87 ...

  6. [转帖]tidb-lightning 逻辑模式导入

    https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-configuration 本文档介绍如何编写逻辑导入模式的配置文件,如何进行性能调优等内 ...

  7. [转帖]Python-Mock接口测试

    https://www.cnblogs.com/zhangwuxuan/p/12928850.html 前言 今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试. 什么是mock? ...

  8. R2M分布式锁原理及实践

    作者:京东科技 张石磊 1 案例引入 名词简介: 资源:可以理解为一条内容,或者图+文字+链接的载体. 档位ID: 资源的分类组,资源必须归属于档位. 问题描述:当同一个档位下2条资源同时审批通过时, ...

  9. 真·Android Zxing 扫码中文乱码解决

    Zxing3.2.1 之前遇到过Android Zxing扫码乱码的问题,网上搜了下解决了下. 今天又遇到了问题. 依然会乱码. 研究总结如下: Zxing 可以在Hints中添加默认编码格式.这个编 ...

  10. net core部署iis执行此操作时出错web.config

    页面访问会报服务器内部错误,你点对应的IIS下的默认页面或模块会出现下面的错语. 请到官网下载对应的运行时:https://www.microsoft.com/net/download 如果是服务器, ...