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

  可是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;

  }