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"));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM