JS使用getComputedStyle()方法获取CSS属性值


Posted in Javascript onApril 23, 2014

在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式,方法有很多很多,现在仅把我经常用的方法总结如下:

1. obj.style:这个方法只能JS只能获取写在html标签中的写在style属性中的值(style=”…”),而无法获取定义在<style type="text/css">里面的属性。

<span style="font-family:Arial;font-size:14px;"><!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“> 
<html xmlns=”http://www.w3.org/1999/xhtml“> 
<head> 
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> 
<title>JS获取CSS属性值</title> 
<style type=”text/css”> 
<!? 
.ss{color:#cdcdcd;} 
?> 
</style> 
</head> <body> 
<div id=”css88″ class=”ss” style=”width:200px; height:200px; background:#333333″>JS获取CSS属性值</div> 
<script type=”text/javascript”> 
alert(document.getElementById(“css88″).style.width);//200px 
alert(document.getElementById(“css88″).style.color);//空白 
</script> 
</body> 
</html> </span>

2. IE中使用的是obj.currentStyle方法,而FF是用的是getComputedStyle 方法

“DOM2级样式”增强了document.defaultView,提供了getComputedStyle()方法。这个方法接受两个参数:要取得计算样式的元素和一个伪元素字符串(例如“:after”)。如果不需要伪元素信息,第二个参数可以是null。getComputerStyle()方法返回一个CSSStyleDeclaration对象,其中包含当前元素的所有计算的样式。以下面的HTML页面为例:

<span style="font-family:Arial;font-size:14px;"><!DOCTYPE html> 
<html> 
<head> 
<title>计算元素样式</title> 
<style> 
#myDiv { 
background-color:blue; 
width:100px; 
height:200px; 
} 
</style> 
<body> 
<div id ="myDiv" style="background-color:red; border:1px solid black"></div> 
<script> 
var myDiv = document.getElementById("myDiv"); 
var computedStyle = document.defaultView.getComputedStyle(myDiv, null); 
alert(computedStyle.backgroundColor); //"red" 
alert(computedStyle.width); //"100px" 
alert(computedStyle.height); //"200px" 
alert(computedStyle.border); //在某些浏览器中是“1px solid black” 
</script> 
</body> 
</head> 
</html></span>

边框属性可能也不会返回样式表中实际的border规则(Opera会返回,但其它浏览器不会)。存在这个差别的原因是不同浏览器解释综合属性的方式不同,因为设置这种属性实际上会涉及很多其他的属性。在设置border时,实际上是设置了四个边的边框宽度、颜色、样式属性。因此,即使computedStyle.border不会在所有浏览器中都返回值,但computedStyle.borderLeftWidth则会返回值。

需要注意的是,即使有些浏览器支持这种功能,但表示值的方式可能会有所区别。例如,Firefox和Safari会返回将所有颜色转换成RGB格式。因此,即使getComputedStyle()方法时,最好多在几种浏览器中测试一下。

IE不支持getComputedStyle()方法,但它有一种类似的概念。在IE中,每个具有style属性的元素还有一个currentStyle属性。这个属性是CSSStyleDeclaration的实例,包含当前元素全部计算后的样式。取得这些样式的方法差不多,如下:

<span style="font-family:Arial;font-size:14px;">var myDiv = document.getElementById("myDiv"); 
var computedStyle = myDiv.currentStyle; 
alert(computedStyle.backgroundColor); //"red" 
alert(computedStyle.width); //"100px" 
alert(computedStyle.height); //"200px" 
alert(computedStyle.border); //undefined</span>

与DOM版本的方式一样,IE也没有返回border样式,因为这是一个综合属性。

3. 我自己在写测试case过程中写的一个简单的函数(适用于Chrome):

<span style="font-family:Arial;font-size:14px;">function getCSS(div){ 
return document.defaultView.getComputedStyle(div, null); 
//return div.currentStyle;//没用过,IE 
}</span>
Javascript 相关文章推荐
再谈querySelector和querySelectorAll的区别与联系
Apr 20 Javascript
JavaScript的strict模式与with关键字介绍
Feb 08 Javascript
jQuery的实例及必知重要的jQuery选择器详解
May 20 Javascript
MvcPager分页控件 适用于Bootstrap
Jun 03 Javascript
JS 设置Cookie 有效期 检测cookie
Jun 15 Javascript
vue实现tab切换外加样式切换方法
Mar 16 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
Mar 20 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
Jun 28 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
Sep 10 Javascript
JS实现滑动拼图验证功能完整示例
Mar 29 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
Nov 09 Javascript
javascript数字时钟示例分享
Apr 23 #Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
Apr 23 #Javascript
iframe实用操作锦集
Apr 22 #Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
Apr 22 #Javascript
jquery分页插件jpaginate在IE中不兼容问题
Apr 22 #Javascript
jquery防止重复执行动画避免页面混乱
Apr 22 #Javascript
Area 区域实现post提交数据的js写法
Apr 22 #Javascript
You might like
默默简单的写了一个模板引擎
2007/01/02 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
JavaScript中的Location地址对象
2008/01/16 Javascript
JavaScript函数详解
2014/11/17 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
JavaScript Split()方法
2015/12/18 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
python批量修改文件后缀示例代码分享
2013/12/24 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
Python @property使用方法解析
2019/09/17 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
仓管员岗位责任制
2014/02/19 职场文书
班级寄语大全
2014/04/10 职场文书
淘宝好评语大全
2014/05/05 职场文书
学生检讨书范文
2014/10/30 职场文书
2014年团工作总结
2014/11/27 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL