打印

发个js从样式表取值的函数

因为写js经常需要用到访问样式,我们常用的做法是通过 DOM.style.XXX来读写样式信息的。可是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来返回值。

 提示:您可以先修改部分代码再运行
阿当
好东西啊,怎么没人呢?不错,留了。
Thr's an I in happiness, thr's no Y in happiness
一个样式的获得不好使用eval吧

TOP

认证您的手机,获得手机认证图标, 更多手机认证的好处
取到好取, 就是设置~
赵勇同学的意思我没太听明白,不好使用eval??是指eval执行效率差?这个地方不用eval就没办法把styleName包进来呀,至少我想不到其它办法。呵呵

楼上兄弟的问题我上面说过了呀,设置就用DOM.style.XXX=xxxx;来设置啊,这个不成问题吧?
阿当

TOP

你咋直呼我的名讳呢 我不是有ID的嘛   

其实你要用也可以 但是怎么说呢我觉得你的函数的使用范围会有点小 你目前这个函数你把obj当成一个具有ID的对象

而我觉得只要是一个对象的引用就可以了 因为可能有的时候我就想用this传obj进去 写的太死 反倒不是一件好事

这样函数的适用范围就小了  不好意思 没看到 后面还有个:号

[ 本帖最后由 dashzhao 于 2008-4-28 11:12 编辑 ]

TOP

引用:
原帖由 cly84920 于 2008-4-28 10:42 发表
赵勇同学的意思我没太听明白,不好使用eval??是指eval执行效率差?这个地方不用eval就没办法把styleName包进来呀,至少我想不到其它办法。呵呵

楼上兄弟的问题我上面说过了呀,设置就用DOM.style.XXX=xxxx;来设 ...
我是说设置,或改变 <style ...></style>这里面的 class 或 #***里的值

TOP

引用:
原帖由 dashzhao 于 2008-4-28 10:53 发表
你咋直呼我的名讳呢 我不是有ID的嘛   

其实你要用也可以 但是怎么说呢我觉得你的函数的使用范围会有点小 你目前这个函数你把obj当成一个具有ID的对象

而我觉得只要是一个对象的引用就可以了 因为可能有 ...
这个是可以的呀,传id或者传this或者是document.getElementById()取得的DOM引用都是可以的。第一个值是可以传DOM对象的。
阿当

TOP

引用:
原帖由 hansir 于 2008-4-28 10:57 发表

我是说设置,或改变 这里面的 class 或 #***里的值
恩,这的确是个问题。不过,这个也是可以解决的,通过访问styleSheets对象可以做到对样式表里的属性进行更改。只是我的工作中没遇到过这样的需求,所以没有深入研究过。你可以研究一下styleSheets,然后自己打包一个函数。
阿当

TOP