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组件的一些写法
Sep 10 Javascript
js和jquery对dom节点的操作(创建/追加)
Apr 21 Javascript
javascript自定义的addClass()方法
May 28 Javascript
js实现圆盘记速表
Aug 03 Javascript
JQuery ztree 异步加载实例讲解
Feb 25 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
浅谈node的事件机制
Oct 09 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 Javascript
JS实现骰子3D旋转效果
Oct 24 Javascript
微信小程序页面渲染实现方法
Nov 06 Javascript
js 对象使用的小技巧实例分析
Nov 08 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
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
dess中一个简单的多路委托的实现
2010/07/20 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
JavaScript实现网页留言板功能
2020/11/23 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
python实现百度语音识别api
2018/04/10 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
python3.7 的新特性详解
2019/07/25 Python
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
大二自我鉴定
2014/01/31 职场文书
2016新年晚会开场白
2015/12/03 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
比较几种Redis集群方案
2021/06/21 Redis
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android