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 相关文章推荐
JavaScript中null与undefined分析
Jul 25 Javascript
浅谈javascript六种数据类型以及特殊注意点
Dec 20 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
Dec 26 Javascript
吐槽一下我所了解的Node.js
Oct 08 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
jQuery()方法的第二个参数详解
Apr 29 Javascript
JavaScript事件 "事件对象"的注意要点
Jan 14 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 Javascript
解决URL地址中的中文乱码问题的办法
Feb 10 Javascript
详解如何用VUE写一个多用模态框组件模版
Sep 27 Javascript
js实现随机数小游戏
Jun 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
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
详解Python中的路径问题
2020/09/02 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
机械设计专业应届生求职信
2013/11/21 职场文书
警察思想汇报
2014/01/04 职场文书
企业总经理职责
2014/02/02 职场文书
学习型班组申报材料
2014/05/31 职场文书
学籍证明模板
2014/11/21 职场文书