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 相关文章推荐
JS面向对象、prototype、call()、apply()
May 14 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
Jan 22 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
Feb 06 Javascript
JavaScript常用的弹出广告及背投广告实现方法
Feb 06 Javascript
微信小程序 video详解及简单实例
Jan 16 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
前端把html表格生成为excel表格的实例
Sep 19 Javascript
JavaScript实现简单生成随机颜色的方法
Sep 21 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
Mar 12 Javascript
vue项目中使用Svg的方法
Oct 24 Javascript
JavaScript错误处理操作实例详解
Jan 04 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
php 中include()与require()的对比
2006/10/09 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
Yii框架登录流程分析
2014/12/03 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
php实现将Session写入数据库
2015/07/26 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
js中new一个对象的过程
2017/02/20 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
Python迭代用法实例教程
2014/09/08 Python
Python程序中设置HTTP代理
2016/11/06 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
python列表使用实现名字管理系统
2019/01/30 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
python实现人机五子棋
2020/03/25 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
小学教师学期末自我评价
2013/09/25 职场文书
初婚初育证明
2014/01/14 职场文书
年终考核评语
2014/01/19 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
联谊会开场白
2015/06/01 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python