JavaScript 读取元素的CSS信息的代码


Posted in Javascript onFebruary 07, 2010

比如为某个HTML元素级联了一组样式信息,其中width属性的值为80px。然后调用脚本读取这个值,得到的结果总是一个空字符串,而事实上我想得到"80px"。针对这种情况,David Flanagan在《JavaScript 权威指南》(第五版)一书中给出了解决方案。

以下是针对JavaScript: The Definitive Guide, 5th Edition Chapter16 Section4的翻译
脚本计算的样式

HTML元素的style属性相当于style HTML 特性, 而作为style属性的值,CSS2属性对象只为这样的一个元素内联样式信息。这并不包括CSS级联里面的任何其他样式。有时你的确想知道确切的赋予某个元素的样式设置,同时忽略掉在级联里面的样式。你想要做的就是为元素计算样式。很不幸被计算的样式的名字是含糊的;它与在浏览器显示元素之前被执行的计算相关:所有的样式均被尝试能否适用于元素,并且所有适用的样式被合并在元素的任何内嵌样式中。这种聚集后的样式信息能够被用于正确的将元素表现在浏览器窗口中。在W3C标准中,用于决定元素被计算样式的API是window对象的getComputedStyle()方法。这个方法的第一个参数是期望被计算样式的元素。第二个参数是任何期望的CSS伪对象,比如":before"或者":after"。你很可能不会对伪对象感兴趣,但是在Mozilla和Firefox对于该方法的实现中,第二个参数是不能被忽略的。否则,由于它的第二个参数,你总是会发现getComputedStyle()引发null。getComputedStyle()的返回值是一个表现所有加载确定元素或者伪对象的样式的CSS2属性对象。与CSS2属性对象能够控制内嵌样式信息不同,getComputedStyle()返回的对象是只读的。IE不支持getComputedStyle()方法,但是提供了一个更简单的替代方案。每个HTML元素有一个currentStyle属性可以控制它被计算的样式。IE的这个API唯一的缺点就是它不能提供一个查询伪对象样式的方式。作为被计算样式的的一个例子,你可以使用如下的跨平台的代码来确认元素被表现的字型:

var p = document.getElementsByTagName("p")[0]; // Get first paragraph of doc 
var typeface = ""; // We want its typeface 
if (p.currentStyle) // Try simple IE API first 
typeface = p.currentStyle.fontFamily; 
else if (window.getComputedStyle) // Otherwise use W3C API 
typeface = window.getComputedStyle(p, null).fontFamily;

计算样式很快,而且它并不总是提供你想要的信息。考虑刚才字型的例子。font-family属性接受了一个逗号分隔的列表,轻松的为跨平台提供了被期望的字体类型。当你查询被计算的fontFamily属性时,你很容易得到确定的加在元素上的font-family样式的值。这或许返回一个值类似于"arial,helvetica,sans-serif",却并不告诉你究竟哪个字型才是真正正在使用的。类似的,如果一个元素没有被绝对定位,而企图通过被计算样式的top和left属性查询它的位置和大小,结果总是返回"auto"。这是一个完全合法的CSS值,只是它并不是你想要的。
Javascript 相关文章推荐
jQuery的三种$()
Dec 30 Javascript
Javasipt:操作radio标签详解
Dec 30 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
Jan 09 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
Dec 20 Javascript
javascript小数精度丢失的完美解决方法
May 31 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
使用jQuery实现购物车结算功能
Aug 15 jQuery
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 jQuery
基于Vue2x的图片预览插件的示例代码
May 14 Javascript
学习node.js 断言的使用详解
Mar 18 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
Dec 19 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
Nov 16 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 #Javascript
JavaScript Event学习第八章 事件的顺序
Feb 07 #Javascript
JavaScript Event学习第七章 事件属性
Feb 07 #Javascript
JavaScript Event学习第六章 事件的访问
Feb 07 #Javascript
JavaScript Event学习第五章 高级事件注册模型
Feb 07 #Javascript
JavaScript Event学习第四章 传统的事件注册模型
Feb 07 #Javascript
JavaScript Event学习第三章 早期的事件处理程序
Feb 07 #Javascript
You might like
php 获取mysql数据库信息代码
2009/03/12 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
PHP中文编码小技巧
2014/12/25 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
点击文章内容处弹出页面代码
2009/10/01 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
Vue数据监听方法watch的使用
2018/03/28 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python中的装饰器详解
2015/04/13 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
QML用PathView实现轮播图
2020/06/03 Python
Python 随机按键模拟2小时
2020/12/30 Python
flask框架中的cookie和session使用
2021/01/31 Python
儿科护理实习自我鉴定
2013/09/19 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
员工安全生产责任书
2014/07/22 职场文书
首席执行官观后感
2015/06/03 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
Python基础知识之变量的详解
2021/04/14 Python
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python