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 相关文章推荐
DOM下的节点属性和操作小结
May 14 Javascript
node.js中的fs.lchmodSync方法使用说明
Dec 16 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
编写高性能Javascript代码的N条建议
Oct 12 Javascript
javascript实现拖动元素交换位置
Nov 29 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
Jul 11 Javascript
AngularJS动态绑定HTML的方法分析
Nov 07 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
Vue.js 2.5新特性介绍(推荐)
Oct 24 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 Javascript
绘制微信小程序验证码功能的实例代码
Jan 05 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
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
VueJS全面解析
2016/11/10 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
利用python画出AUC曲线的实例
2020/02/28 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
python3让print输出不换行的方法
2020/08/24 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
思想政治教育专业个人求职信范文
2013/12/20 职场文书
校运会入场式解说词
2014/02/10 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
商铺消防安全责任书
2014/07/29 职场文书
品牌转让协议书
2014/08/20 职场文书
综合素质自我评价评语
2015/03/06 职场文书
销售人员管理制度
2015/08/06 职场文书
开学随笔
2015/08/15 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript