A-A+

style、currentStyle、getComputedStyle区别介绍

2015年10月31日 JavaScript 暂无评论 阅读 91 次

样式表有三种方式

内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有效。

内部样式(internal Style Sheet):是写在HTML的里面的,内部样式只对所在的网页有效。

外部样式表(External Style Sheet):如果很多网页需要用到同样的样式(Styles),将样式(Styles)写在一个以.css为后缀的CSS文件里,然后在每个需要用到这 些样式(Styles)的网页里引用这个CSS文件。 最常用的是style属性,在JavaScript中,通过document.getElementById(id).style.XXX就可以获取到 XXX的值,但意外的是,这样做只能取到通过内嵌方式设置的样式值,即style属性里面设置的值。

解决方案:引入currentStyle,runtimeStyle,getComputedStyle style 标准的样式,可能是由style属性指定的!

runtimeStyle 运行时的样式!如果与style的属性重叠,将覆盖style的属性!

currentStyle 指 style 和 runtimeStyle 的结合! 通过currentStyle就可以获取到通过内联或外部引用的CSS样式的值了(仅限IE) 如:document.getElementById("test").currentStyle.top

要兼容FF,就得需要getComputedStyle 出马了

注意: getComputedStyle是firefox中的, currentStyle是ie中的. 比如说

<style>
#mydiv {
     width : 300px;
}
</style>

则:

var mydiv = document.getElementById('mydiv');
if(mydiv.currentStyle) {
      var width = mydiv.currentStyle['width'];
      alert('ie:' + width);
} else if(window.getComputedStyle) {
      var width = window.getComputedStyle(mydiv , null)['width'];
      alert('firefox:' + width);
}

另外在FF下还可以通过下面的方式获取

document.defaultView.getComputedStyle(mydiv,null).width;
window.getComputedStyle(mydiv , null).width;

原文地址:http://www.cnblogs.com/flyjs/archive/2012/02/20/2360502.html

 

demo参考: demo

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>css函数</title>
    <style>
        #div1{
            height:200px;width:200px;background: red;
        }
    </style>
</head>
<body>
<div id="div1" style="  height:200px;width:200px;background: red;">

</div>
<button type="button" id="btn1">改变css样式</button>
<script>
//    function cssStyle(){
//        参数个数
//       alert(arguments.length);
//    alert(arguments[0]); //第一个参数

//    }
    function getStyle(obj,sStyle,sValue){
        //传参后 a等价于 arguments[0]
        if(arguments.length ==2){
            //获取
//            return obj.style[b];
//            return obj.currentStyle.width;
//            return getComputedStyle(obj,false)[b];
//            判断ie或者火狐
            if(obj.currentStyle){
//                ie只支持currentStyle
                return obj.currentStyle.sStyle;
            }else{
//                火狐只支持getComputedStyle
                return getComputedStyle(obj,false)[sStyle];
            }
        }else if(arguments.length ==3){
//            arguments[0].style[arguments[1]]= arguments[2];
//            与下方等价
            obj.style[sStyle]=sValue;
        }

    }
    window.onload=function(){
        var oBtn = document.getElementById("btn1");
        var oDiv =document.getElementById("div1");

        oBtn.onclick = function(){
//            获取属性值
//            alert(getStyle(oDiv,"height"));
//            设置属性值
            getStyle(oDiv,"background","green");
        }

    }
</script>
</body>
</html>
标签:

给我留言

Copyright © web前端技术开发个人博客 保留所有权利  京ICP备14060653号 Theme  Ality

用户登录