获取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 相关文章推荐
js AspxButton的客户端操作
Jun 26 Javascript
Prototype 工具函数 学习
Jul 23 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
Feb 22 Javascript
js Event对象的5种坐标
Sep 12 Javascript
javascript中的undefined和not defined区别示例介绍
Feb 26 Javascript
jQuery中:enabled选择器用法实例
Jan 04 Javascript
详解AngularJS中的作用域
Jun 17 Javascript
基于jquery实现简单的手风琴特效
Nov 24 Javascript
JavaScript实现256色转灰度图
Feb 22 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
Apr 18 Javascript
JS实现快递单打印功能【推荐】
Jun 21 Javascript
vue-autoui自匹配webapi的UI控件的实现
Mar 20 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
html中select语句读取mysql表中内容
2006/10/09 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
form自动提交实例讲解
2017/07/10 PHP
使用正则替换变量
2007/05/05 Javascript
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
python下MySQLdb用法实例分析
2015/06/08 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
python脚本后台执行方式
2019/12/21 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
挪威手表购物网站:Klokker
2016/09/19 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
学生手册评语
2014/05/05 职场文书
建国大业观后感600字
2015/06/01 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
公历12个月名称的由来
2022/04/12 杂记