JS getStyle获取最终样式函数代码


Posted in Javascript onApril 01, 2010
#flower { 
width:100px; 
font-size:12px; 
float:left; 
opacity:0.5; 
filter:alpha(opacity=50); 
}

定义一个id="flower"的div元素 并设置如上样式,我们的目标就是通过javascript来获取样式的最终属性
<div id="flower" >...</div>
getStyle函数:
这里用到了三个原型扩展
String.prototype.capitalize 这个方法是让字符串首字母大写
Array.prototype.contains 判断数组中是否有指定成员
String.prototype.camelize 这个是让"font-size" 字符串转换成 "fontSize" 这样的格式用来获取样式
String.prototype.capitalize=function(){ 
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); 
} 
Array.prototype.contains=function(A){ 
return (this.indexOf(A) >= 0); 
} 
String.prototype.camelize=function(){ 
return this.replace(/\-(\w)/ig, 
function(B, A) { 
return A.toUpperCase(); 
}); 
} 
var css={ 
getStyle:function(elem,styles){ 
var value, 
elem=document.getElementById(elem); 
if(styles == "float"){ 
document.defaultView ? styles = 'float' /*cssFloat*/ : styles='styleFloat'; 
} 
value=elem.style[styles] || elem.style[styles.camelize()]; 
if(!value){ 
if (document.defaultView && document.defaultView.getComputedStyle) { 
var _css=document.defaultView.getComputedStyle(elem, null); 
value= _css ? _css.getPropertyValue(styles) : null; 
}else{ 
if (elem.currentStyle){ 
value = elem.currentStyle[styles.camelize()]; 
} 
} 
} 
if(value=="auto" && ["width","height"].contains(styles) && elem.style.display!="none"){ 
value=elem["offset"+styles.capitalize()]+"px"; 
} 
if(styles == "opacity"){ 
try { 
value = elem.filters['DXImageTransform.Microsoft.Alpha'].opacity; 
value =value/100; 
}catch(e) { 
try { 
value = elem.filters('alpha').opacity; 
} catch(err){} 
} 
} 
return value=="auto" ? null :value; 
} 
} 
css.getStyle("flower","width"); //100px; 
css.getStyle("flower","font-size");//12px; 
css.getStyle("flower","float");//left 
css.getStyle("flower","opacity");//0.5

先回顾下基础
style 标准的样式!可能是由style属性指定的!
runtimeStyle 运行时的样式!如果与style的属性重叠,将覆盖style的属性!
currentStyle 指 style 和 runtimeStyle 的结合!
style 内联的样式
currentStyle 代表了在全局样式表、内嵌样式和 HTML 标签属性中指定的对象格式和样式
runtimeStyle 代表了居于全局样式表、内嵌样式和 HTML 标签属性指定的格式和样式之上的对象的格式和样式
(FF中没有currentStyle 和runtimeStyle)
getStyle(元素id,获取属性);
获取元素style标签内的样式
elem.style[styles] || elem.style[styles.camelize()]
支持传入"font-size"的写法
但这并不是最终的样式 .
获取最终样式 有两终办法 一个是
document.defaultView.getComputedStyle //w3c的方法
还有就是通过 elem.currentStyle["..."] //ie下的方法
currentStyle 方法 需要将带"-"字符的属性 需要通过String.prototype.camelize转换成ie可识别的属性
if(value=="auto" && ["width","height"].contains(styles) && elem.style.display!="none"){ 
value=elem["offset"+styles.capitalize()]+"px"; 
}

当 css中定义 元素的宽度为 auto时,并不能获取元素的最终宽度是多少,我们可以用 offsetWidth 和 offsetHeight 获取实际值
当然前提是要在元素为"可见"的状态下!
try { 
value = elem.filters['DXImageTransform.Microsoft.Alpha'].opacity; 
value =value/100; 
}catch(e) { 
try { 
value = elem.filters('alpha').opacity; 
} catch(err){} 
}

这是获取透明度的方法,ie中定义透明度和其他浏览器不同.需把通过滤镜得到的opacity值/100。返回标准的opacity值(范围0-1);
Javascript 相关文章推荐
用javascript实现计算两个日期的间隔天数
Aug 14 Javascript
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
Apr 09 Javascript
js定时调用方法成功后并停止调用示例
Apr 08 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
js实现ifram取父窗口URL地址的方法
Feb 09 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
Dec 27 Javascript
浅谈vue中慎用style的scoped属性
Nov 28 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
Nov 05 Javascript
js中的reduce()函数讲解
Jan 18 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
使用layui前端框架弹出form表单以及提交的示例
Oct 25 Javascript
Javascript 通过json自动生成Dom的代码
Apr 01 #Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 #Javascript
JavaScript中实现块作用域的方法
Apr 01 #Javascript
cloudgamer出品ImageZoom 图片放大效果
Apr 01 #Javascript
js 异步处理进度条
Apr 01 #Javascript
JavaScript中String和StringBuffer的速度之争
Apr 01 #Javascript
Cookie 小记
Apr 01 #Javascript
You might like
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
python进程与线程小结实例分析
2018/11/11 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
解决django FileFIELD的编码问题
2020/03/30 Python
会员卡清退活动总结
2014/08/27 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python