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 相关文章推荐
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
JavaScript 检测浏览器和操作系统的脚本
Dec 26 Javascript
select标记美化--JS式插件、后期加载
Apr 01 Javascript
Javascript仿PHP $_GET获取URL中的参数
May 12 Javascript
jQuery中queue()方法用法实例
Dec 29 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
Apr 07 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
JS拖拽组件学习使用
Jan 19 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
Mar 30 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
vue全屏事件开发详解
Jun 17 Javascript
原生js实现随机点名
Jul 05 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
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
Vue实现日历小插件
2019/06/26 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python中如何获取类属性的列表
2016/12/26 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
演讲稿开场白
2014/01/13 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
国培教师自我鉴定
2014/02/12 职场文书
老人祝寿主持词
2014/03/28 职场文书
我的梦想演讲稿
2014/04/30 职场文书
中药学自荐信
2014/06/15 职场文书
经济类毕业生求职信
2014/06/26 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
Python+Tkinter打造签名设计工具
2022/04/01 Python
vue动态绑定style样式
2022/04/20 Vue.js