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 相关文章推荐
js新闻滚动 js如何实现新闻滚动效果
Jan 07 Javascript
JS操作Cookies的小例子
Oct 15 Javascript
给文字加上着重号的JS代码
Nov 12 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
Apr 06 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
BootStrap和jQuery相结合实现可编辑表格
Apr 21 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
Nov 25 Javascript
JavaScript简单计算人的年龄示例
Apr 15 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
Apr 21 Javascript
Vue引入Stylus知识点总结
Jan 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
PHP MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php中Snoopy类用法实例
2015/06/19 PHP
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
PHP守护进程实例
2015/03/06 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
python的keyword模块用法实例分析
2015/06/30 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python实现简单加密解密机制
2019/03/19 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
销售高级职员求职信
2013/10/29 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
经营管理策划方案
2014/05/22 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫
css样式important规则的正确使用方式
2022/06/10 HTML / CSS