获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)


Posted in Javascript onFebruary 14, 2011

可是DOM.style这种写法只能访问<DOM style=""></DOM>,这样在标签里内置的样式,如果样式写在<style type="text/css"></style>,或者.css文件里,那么就办法读到样式了。

其实呢,还有别的方法可以读到这些样式信息,方法有两种,一种是通过document.styleSheets对象,另一种是通过“最终样式”对象。其中 IE中这个对象叫做currentStyle,FF中这个对象叫做document.defaultView。我将这两个类打包了一下,做了一个用于访问 样式信息的函数,如下:

//===========================访问样式表函数==================================== 
function returnStyle(obj,styleName){ 
var myObj = typeof obj == "string" ? document.getElementById(obj) : obj; 
if(document.all){ 
return eval("myObj.currentStyle." + styleName); 
} else { 
return eval("document.defaultView.getComputedStyle(myObj,null)." + styleName); 
} 
}

函数有两个参数:

obj:访问的对象,类型为DOM对象,或者是对象的id;

styleName: 需要访问的样式名称。类型为string,但是名称不能用"-"号,要用像style.对象的属性名一样的大小写混写名称,例如background-color要写成backgroundColor。

函数返回值为 string类型。

注意:这个方法只能访问样式文件,不能写。如果要写样式,还是要用DOM.style.XXX的方法。另外,FF下有些样式访问有问题,例如padding,margin。如果样式中设置了padding,margin等值,我们可以用marginLeft来返回值。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<style type="text/css"> 
#demo{background-color:#000;padding:10px;color:#fff;width:200px;} 
</style> 
<script type="text/javascript"> 
//===========================访问样式表==================================== 
function returnStyle(obj,styleName){ 
var myObj = typeof obj == "string" ? document.getElementById(obj) : obj; 
if(document.all){ 
return eval("myObj.currentStyle." + styleName); 
} else { 
return eval("document.defaultView.getComputedStyle(myObj,null)." + styleName); 
} 
} 
</script> 
<title></title> 
</head> 
<body> 
<div id="demo">这里是测试内容</div> 
<br /><br /> 
<a href="###" onclick="alert(returnStyle('demo','width'));">点击测试</a> 
</body> 
</html>

===========================
function getStyle( elem, name ) { 
//如果该属性存在于style[]中,则它最近被设置过(且就是当前的) 
if (elem.style[name]) 
return elem.style[name]; 
//否则,尝试IE的方式 
else if (elem.currentStyle) 
return elem.currentStyle[name]; 
//或者W3C的方法,如果存在的话 
else if (document.defaultView && document.defaultView.getComputedStyle) { 
//它使用传统的"text-Align"风格的规则书写方式,而不是"textAlign" 
name = name.replace(/([A-Z])/g,"-$1"); 
name = name.toLowerCase(); 
//获取style对象并取得属性的值(如果存在的话) 
var s = document.defaultView.getComputedStyle(elem,""); 
return s && s.getPropertyValue(name); 
//否则,就是在使用其它的浏览器 
} else 
return null; 
}
Javascript 相关文章推荐
JavaScript的面向对象(一)
Nov 09 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
Feb 05 Javascript
javascript重写alert方法的实例代码
Mar 29 Javascript
jquery实现控制表格行高亮实例
Jun 05 Javascript
jQuery统计指定子元素数量的方法
Mar 17 Javascript
简介JavaScript中的getSeconds()方法的使用
Jun 10 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
Jan 25 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
Mar 01 Javascript
js+canvas实现动态吃豆人效果
Mar 22 Javascript
基于JavaScript实现验证码功能
Apr 01 Javascript
使用原生js+canvas实现模拟心电图的实例
Sep 20 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
Sep 11 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 #Javascript
JQuery 选择器、过滤器介绍
Feb 14 #Javascript
AJAX分页的代码(后台asp.net)
Feb 14 #Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 #Javascript
jquery isType() 类型判断代码
Feb 14 #Javascript
jquery isEmptyObject判断是否为空对象的函数
Feb 14 #Javascript
jquery each()源代码
Feb 14 #Javascript
You might like
PHP中的cookie
2006/11/26 PHP
php绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
常用的js方法合集
2017/03/10 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
python爬虫实现获取下一页代码
2020/03/13 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
一夜的工作教学反思
2014/02/08 职场文书
会计学习心得体会
2014/09/09 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
合作协议书范本
2014/10/25 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
使用tensorflow 实现反向传播求导
2021/05/26 Python
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
Python Flask实现进度条
2022/05/11 Python