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 相关文章推荐
jquery中加载图片自适应大小主要实现代码
Aug 23 Javascript
JS实现选项卡实例详解
Nov 17 Javascript
JQuery ztree 异步加载实例讲解
Feb 25 Javascript
JavaScript数据推送Comet技术详解
Apr 07 Javascript
浅析angularJS中的ui-router和ng-grid模块
May 20 Javascript
前端框架Vue.js中Directive知识详解
Sep 12 Javascript
ReactJs快速入门教程(精华版)
Nov 28 Javascript
jQuery将表单序列化成一个Object对象的实例
Nov 29 Javascript
Bootstrap Table使用心得总结
Nov 29 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
Nov 20 Javascript
JavaScript使用prototype属性实现继承操作示例
May 22 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
php5 and xml示例
2006/11/22 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
php cookie 详解使用实例
2016/11/03 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
PHP goto语句用法实例
2019/08/06 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
Python 常用 PEP8 编码规范详解
2017/01/22 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
利用python如何处理nc数据详解
2018/05/23 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
公司保密承诺书
2014/03/27 职场文书
模具专业自荐信
2014/05/29 职场文书
创业计划书之美容店
2019/09/16 职场文书
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server