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 相关文章推荐
统一接口:为FireFox添加IE的方法和属性的js代码
Mar 25 Javascript
一句话JavaScript表单验证代码
Aug 02 Javascript
javascript:history.go()和History.back()的区别及应用
Nov 25 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
原生js实现可拖拽效果
Feb 28 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
简单实现JavaScript弹幕效果
Aug 27 Javascript
vue实现与安卓、IOS交互的方法
Nov 02 Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 Javascript
JS遍历树层级关系实现原理解析
Aug 31 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
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
python tornado修改log输出方式
2019/11/18 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
测试驱动开发的主要步骤是什么
2014/12/10 面试题
大家访活动实施方案
2014/03/10 职场文书
数据保密承诺书
2014/06/03 职场文书
标准单位租车协议书
2014/09/23 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
公司年会主持词范文!
2019/05/07 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python