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 相关文章推荐
RGB颜色值转HTML十六进制(HEX)代码的JS函数
Apr 25 Javascript
使弱类型的语言JavaScript变强势
Jun 22 Javascript
关于Javascript与iframe的那些事儿
Jul 04 Javascript
a标签click和href执行顺序探讨
Jun 23 Javascript
jquery拖拽排序简单实现方法(效果增强版)
Feb 16 Javascript
bootstrap多种样式进度条展示
Dec 20 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
May 08 jQuery
Vue实现点击后文字变色切换方法
Feb 11 Javascript
Vue使用mixins实现压缩图片代码
Mar 14 Javascript
vue 中swiper的使用教程
May 22 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
Sep 20 jQuery
微信小程序地图导航功能实现完整源代码附效果图(推荐)
Apr 28 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
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
js实现随机抽奖
2020/03/19 Javascript
一张图带我们入门Python基础教程
2017/02/05 Python
python 输出所有大小写字母的方法
2019/01/02 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
校园创业策划书
2014/01/14 职场文书
消防安全检查制度
2014/02/04 职场文书
机关作风建设心得体会
2014/10/22 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
红旗渠导游词
2015/02/09 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏