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 相关文章推荐
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
jQuery实现点击图片翻页展示效果的方法
Feb 16 Javascript
ionic实现带字的toggle滑动组件
Aug 27 Javascript
JavaScript实现Java中Map容器的方法
Oct 09 Javascript
判断数组的最佳方法(推荐)
Oct 11 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
Mar 28 Javascript
史上最为详细的javascript继承(推荐)
May 18 Javascript
JavaScript实现图片放大镜效果
Jun 27 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
May 11 Javascript
uniapp,微信小程序中使用 MQTT的问题
Jul 11 Javascript
Vue2.0 $set()的正确使用详解
Jul 28 Javascript
JavaScript 原型与原型链详情
Nov 02 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
global.php
2006/12/09 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用多线程不断刷新网页的方法
2015/03/31 Python
Python中enumerate函数代码解析
2017/10/31 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python使用tornado实现登录和登出
2018/07/28 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
python实现图片转字符画的完整代码
2021/02/21 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
心理学专业毕业生推荐信范文
2013/11/21 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
浪费资源的建议书
2014/03/12 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
党建工作整改措施
2014/10/28 职场文书
环卫处个人工作总结
2015/03/04 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
调解协议书范本
2016/03/21 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫