获取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 相关文章推荐
select、radio表单回显功能实现避免使用jquery载入赋值
Jun 08 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
Apr 03 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
聊一聊Vue.js过渡效果
Sep 07 Javascript
jquery对所有input type=text的控件赋值实现方法
Dec 02 Javascript
JS判断微信扫码的方法
Aug 07 Javascript
Express结合Webpack的全栈自动刷新
May 23 Javascript
jquery操作select常见方法大全【7种情况】
May 28 jQuery
Vue2.x通用条件搜索组件的封装及应用详解
May 28 Javascript
微信小程序从注册账号到上架(图文详解)
Jul 17 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
Dec 17 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下获取客户端ip地址的函数
2010/03/15 PHP
php中引用符号(&amp;)的使用详解
2013/11/13 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
jquery map方法使用示例
2014/04/23 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
Python+django实现文件上传
2016/01/17 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
Python 加密的实例详解
2017/10/09 Python
Python实现图片拼接的代码
2018/07/02 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
Python如何测试stdout输出
2020/08/10 Python
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
七一建党日演讲稿
2014/09/05 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
校园运动会广播稿
2015/08/19 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
mysql 索引合并的使用
2021/08/30 MySQL
Redis实现一个账号只能登录一个设备
2022/04/19 Redis