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 相关文章推荐
html 锁定页面(js遮罩层弹出div效果)
Oct 27 Javascript
JS面向对象编程浅析
Aug 28 Javascript
JQuery获取浏览器窗口内容部分高度的代码
Feb 24 Javascript
jQuery学习笔记之jQuery中的$
Jan 19 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
Aug 08 Javascript
vue.js入门教程之基础语法小结
Sep 01 Javascript
关于在mongoose中填充外键的方法详解
Aug 14 Javascript
react-native中ListView组件点击跳转的方法示例
Sep 30 Javascript
使用vue实现grid-layout功能实例代码
Jan 05 Javascript
vue.draggable实现表格拖拽排序效果
Dec 01 Javascript
layui--select使用以及下拉框实现键盘选择的例子
Sep 24 Javascript
node.js中事件触发器events的使用方法实例分析
Nov 23 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自动获取目录下的模板的代码
2010/08/08 PHP
php+highchats生成动态统计图
2014/05/21 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
onpropertypchange
2006/07/01 Javascript
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
Javascript中神奇的this
2016/01/20 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
webpack引入eslint配置详解
2018/01/22 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
Vue 组件封装 并使用 NPM 发布的教程
2018/09/30 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Python循环实现n的全排列功能
2019/09/16 Python
python实现视频读取和转化图片
2019/12/10 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
python 动态绘制爱心的示例
2020/09/27 Python
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
计算机专业个人求职信范例
2013/09/23 职场文书
工商管理实习生自我鉴定范文
2013/12/18 职场文书
接受捐赠答谢词
2014/01/27 职场文书
理财投资建议书
2014/03/12 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
员工安全生产责任书
2014/07/22 职场文书
单位授权委托书范文
2014/08/02 职场文书
实施意见格式范本
2015/06/05 职场文书
领导离职感言
2015/08/03 职场文书
《角的度量》教学反思
2016/02/18 职场文书