可是dom.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来返回值。
复制代码 代码如下:
这里是测试内容
点击测试
===========================
复制代码 代码如下:
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;
}