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 相关文章推荐
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
Nov 06 Javascript
js 操作符汇总
Nov 08 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
Jul 28 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
关于javascript事件响应的基础语法总结(必看篇)
Dec 26 Javascript
JavaScript之生成器_动力节点Java学院整理
Jun 30 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
Jan 23 Javascript
js数组去重的方法总结
Jan 18 Javascript
详解一个基于套接字实现长连接的express
Mar 28 Javascript
一文了解Vue中的nextTick
May 06 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
Jun 10 Javascript
react使用antd表单赋值,用于修改弹框的操作
Oct 29 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
VFP与其他应用程序的集成
2006/10/09 PHP
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
PHP多进程简单实例小结
2019/11/09 PHP
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
JS随机密码生成算法
2019/09/23 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python 除法小技巧
2008/09/06 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
酒店大堂副理的职责范文
2014/02/13 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
公司会议开幕词
2015/01/29 职场文书
离婚被告代理词
2015/05/23 职场文书
防溺水主题班会教案
2015/08/12 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python