获取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 隔行换色函数代码
Oct 24 Javascript
基于Jquery实现的一个图片滚动切换
Jun 21 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
JavaScript自定义等待wait函数实例分析
Mar 23 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
Nov 15 Javascript
使用jquery datatable和bootsrap创建表格实例代码
Mar 17 Javascript
详解angular2实现ng2-router 路由和嵌套路由
Mar 24 Javascript
关于Bootstrap按钮组件消除黄框的方法
May 19 Javascript
使用webpack打包koa2 框架app
Feb 02 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
May 07 Javascript
mpvue微信小程序开发之实现一个弹幕评论
Nov 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中使用hidef扩展代替define提高性能
2015/04/09 PHP
详解php用static方法的原因
2018/09/12 PHP
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
测试你的JS的掌握程度的代码
2009/12/09 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
vue cli安装使用less的教程详解
2019/07/12 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
python中将字典转换成其json字符串
2014/07/16 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
20招让你的Python飞起来!
2016/09/27 Python
Python callable()函数用法实例分析
2018/03/17 Python
python中的变量如何开辟内存
2018/06/26 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
Python实现简单的2048小游戏
2021/03/01 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
成绩报告单家长评语
2014/12/30 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python