js获取元素样式的具体信息

var box = document.getElementById("dian");
 获取元素的某一个具体形式属性值

1.元素.style.属性名
 ->这种方式需要要元素的样式写在行内(写在样式表中不获取不到)
 ->在真实项目中,这种方式不常用,因为不能为了获取把所有样式写在行内(无法实现css和html分离)

2.使用window.getComputedStyle这个方法获取所有经过浏览器计算过的样式。
->所有经过浏览器计算过的样式:只要当前的元素标签可以在页面中呈现出来,那么它的所有的样式都是经过浏览器计算过得(渲染过的)->哪怕有些没有写的样式也可以获取到。
->语法:window.getComputedStyle(当前要操作的元素对象,当前元素的伪类一般不写伪类写null)。
console.log(window.getComputedStyle(box,null).width);//或者
console.log(window.getComputedStyle(box,null)["width"]);

3.方法虽然好用但是在ie6-8下不兼容:因为window没有getComputedStyle这个属性->ie6-8执行这个方法会报错
 console.log(window.getComputedStyle);//undefined
 ->在ie6-8中可以使用currentStyle来获取所有经过浏览器计算过的样式。
 console.log(box.currentStyle.width);

 1)利用try catch(e) 解决兼容问题
 ->curEle:获取样式的元素
 ->attr:获取样式的属性

function getCss(curEle,attr){
        var val = null;
        try{
              val = window.getComputedStyle(curEle,null)[attr];
        }catch(e){
              val = curEle.currentStyle[attr];
        }
        return val;
 }
 console.log(getCss(box,"width"));

 

2)利用判断是否有getComputedStyle属性解决兼容问题 性能比try catch好

function getCss(curEle,attr){
      var val = null;
      if("getComputedStyle" in window){
            val = window.getComputedStyle(curEle,null)[attr];
      }else{
            val = curEle.currentStyle[attr];
      }
      return val;
 }

console.log(getCss(box,"width"));

 


3) 通过检测浏览器版本和类型处理兼容
 ->window.navigator.userAgent 获取浏览器信息
 获取当前浏览器为ie6-8
 ->/MSIE(6|7|8)/.test(navigator.userAgent);

function getCss(curEle,attr){
         var val = null;
         if(/MSIE(6|7|8)/.test(navigator.userAgent)){ 
                     val = curEle.currentStyle[attr];
         }else{
                     val = window.getComputedStyle(curEle,null)[attr];
         }
         return val;
 }
console.log(getCss(box,"width"));

 

第一次升级:把获取到单位的样式值单位值去掉
->只有符合”数字+单位/数字“才可以使用parseFloat

function getCss(curEle,attr){
           var val = null,reg = null;
           if("getComputedStyle" in window){
                    val = window.getComputedStyle(curEle,null)[attr];
           }else{
                    val = curEle.currentStyle[attr];
           }
           reg = /^(-?\d+(\.\d+)?)(px|pt|rem|em)?$/i;
           return reg.test(val)?parseFloat(val):val;
 }
 console.log(getCss(box,"width"));

 

第二次升级:有些属性在浏览器上是不兼容的例如opacity

function getCss(curEle,attr){
           var val = null,reg = null;
           if("getComputedStyle" in window){
                   val = window.getComputedStyle(curEle,null)[attr];
           }else{
                  if(attr === "opacity"){
                        val = curEle.currentStyle["filter"];
                        reg = /^alpha\(opacity=(\d+(?:\.\d+)?)\)$/i;
                        val = reg.test(val)?reg.exec(val)[1]/100:1;
                  }else{
                      val = curEle.currentStyle[attr];
                  }
          }
          reg = /^(-?\d+(\.\d+)?)(px|pt|rem|em)?$/i;
          return reg.test(val)?parseFloat(val):val;
}
console.log(getCss(box,"width"));