获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)

 更新时间:2011年02月14日 22:29:53   作者:  
JS从样式表取值的函数,IE中以currentStyle,firefox中defaultView来获取,需要的朋友可以参考下。
可是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;
}

相关文章

  • 去除链接虚线全面分析总结

    去除链接虚线全面分析总结

    去除链接虚线全面分析总结...
    2006-08-08
  • js实现根据文件url批量压缩下载成zip包

    js实现根据文件url批量压缩下载成zip包

    本文主要介绍了js实现根据文件url批量压缩下载成zip包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 原生javascript实现分页效果

    原生javascript实现分页效果

    这篇文章主要为大家详细介绍了原生javascript实现分页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • JS弹出新窗口被拦截的解决方法

    JS弹出新窗口被拦截的解决方法

    使用js使用新窗口打开页面的时候,经常遇到被浏览器拦截的情况,怎么解决呢?下面小编通过两种情况分析并分别附有解决办法,对js弹出新窗口被拦截感兴趣的朋友一起学习吧
    2016-08-08
  • JavaScript简单计算人的年龄示例

    JavaScript简单计算人的年龄示例

    这篇文章主要介绍了JavaScript简单计算人的年龄,涉及简单的javascript字符串转换及日期运算相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • Javascript调试脚本的经验之谈

    Javascript调试脚本的经验之谈

    随着用JavaScript编程的深入,你会开始理解那些JavaScript给出的不透明错误信息。一旦你理解了你常犯的一般性错误,你就会很快知道怎样避免它们,这样你写的代码中的错误将越来越少。
    2008-10-10
  • 浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)

    浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)

    今天小编就为大家分享一篇浅谈监听单选框radio改变事件(和layui中单选按钮改变事件),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法

    使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法

    这篇文章主要介绍了使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • TypeScript的安装、使用、自动编译的实现

    TypeScript的安装、使用、自动编译的实现

    TypeScript是一种由微软开发的开源、跨平台的编程语言。这篇文章主要介绍了TypeScript的安装、使用、自动编译的实现方法,需要的朋友可以参考下
    2020-04-04
  • JavaScript报错:Uncaught TypeError: Cannot set property ‘X‘ of undefine的解决方案

    JavaScript报错:Uncaught TypeError: Cannot set&n

    在 JavaScript 编程中,“Uncaught TypeError: Cannot set property ‘X’ of undefined” 是一种常见的错误,这种错误通常发生在试图给一个未定义的对象的属性赋值时,本文介绍了JavaScript报错的解决方案,需要的朋友可以参考下
    2024-07-07

最新评论