获取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 相关文章推荐
Prototype使用指南之enumerable.js
Jan 10 Javascript
jquery 获取json数据实现代码
Apr 27 Javascript
javascript 面向对象的JavaScript类
May 04 Javascript
js中 关于undefined和null的区别介绍
Apr 16 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
原生js的RSA和AES加密解密算法
Oct 08 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
利用HBuilder打包前端开发webapp为apk的方法
Nov 13 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
Jan 20 Javascript
react使用CSS实现react动画功能示例
May 18 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 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
php fread函数使用方法总结
2019/05/28 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
Python的垃圾回收机制深入分析
2014/07/16 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
解决DataFrame排序sort的问题
2018/06/07 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
Django Rest framework频率原理与限制
2019/07/26 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
Python实现自动装机功能案例分析
2020/10/22 Python
查环查孕证明
2014/01/10 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
公司周年庆典标语
2014/10/07 职场文书
教育见习报告范文
2014/11/03 职场文书
客户付款通知书
2015/04/23 职场文书
python munch库的使用解析
2021/05/25 Python
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
angular异步验证器防抖实例详解
2022/03/31 Javascript
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android