获取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 相关文章推荐
更正确的asp冒泡排序
May 24 Javascript
用Javascript来生成ftp脚本的小例子
Jul 03 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
Sep 06 Javascript
js防止表单重复提交的两种方法
Sep 30 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
Nov 29 Javascript
node.js微信公众平台开发教程
Mar 04 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
微信小程序 Image API实例详解
Sep 30 Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 Javascript
微信小程序报错:this.setData is not a function的解决办法
Sep 27 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
Mar 01 Javascript
微信小程序实现发微博功能的示例代码
Jun 24 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 缓存实现代码及详细注释
2010/05/16 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
Python发送邮件实现基础解析
2020/08/14 Python
Python内置函数property()如何使用
2020/09/01 Python
彪马法国官网:PUMA法国
2019/12/15 全球购物
机关门卫岗位职责
2013/12/30 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
房屋质量投诉书
2015/07/02 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
pycharm代码删除恢复的方法
2021/06/26 Python
Python实现打乒乓小游戏
2021/09/25 Python