獲取元素的某一個具體的樣式屬性值
1、元素 . style . 屬性名
需要把元素的樣式都寫在行內樣式上才可以(寫在樣式表中是不管用的)
實際項目中,這種方式不常用,因為不能為了獲取值而把所有樣式都寫在行內(無法實現CSS和HTML的分離)
2、使用window.getComputedStyle( )這個方法獲取所有經過瀏覽器計算過的樣式
所有經過瀏覽器計算過的樣式:只要當前的元素標簽可以在頁面中呈現出來,那么它的所有的樣式都是經過瀏覽器計算過的(渲染過的),哪怕這些樣式你沒有寫,也可以獲取到
window.getComputedStyle(a,b ):
參數a:當前要操作的元素對象
參數b:當前元素的偽類(一般不用偽類,而寫null)
獲取的結果是CSSStyleDeciaration這個類的一個實例:包含了當前元素的所有樣式屬性和值
console.log(window.getComputedStyle(div,null).height); //或者["height"]
在IE6-8下不兼容
因為window下沒有getComputedStyle這個屬性。
在IE6-8下使用currentStyle來獲取所有經過瀏覽器計算過的樣式
處理兼容
1、使用try、catch處理兼容:(一般不用)
前提:必須保證try中的代碼在不兼容瀏覽器中執行的時候報錯,這樣的話才可以用catch捕獲到異常的信息,進行其他處理。
不管當前是什么瀏覽器,都需要先把try中的代碼執行一遍,報錯之后再執行curEle.currentStyle,消耗性能。
//函數getCss:獲取當前元素所有經過瀏覽器計算過的樣式中的[attr]對應的值
//curEle:[object]當前要操作的元素對象
//attr:[string]要獲取的樣式屬性的名稱
function getCss(curEle,attr){
var val=null;
try{
val=window.getComputedStyle(curEle,null)[attr];
}catch(e){
val=curEle.currentStyle[attr];
}
return val;
}
2、判斷當前瀏覽器中是否存在這個屬性或方法,存在就兼容,不存在就不兼容(最常用)
function getCss(curEle,attr){
var val=null,reg=null;
if("getComputedStyle" in window){ //--->如果返回的是true,說明window下有getComputedStyle這個屬性,代表兼容
val=window.getComputedStyle(curEle,null)[attr];
}else{ //--->IE6-8
//-->如果傳遞進來的結果是opacity,說明像獲取到的是透明度,但是在IE6-8下獲取透明度需要使用filter
if(attr==="opacity"){
val=curEle.currentStyle["filter"]; //---->“alpha(opacity=10)”把獲取到的結果進行剖析,獲取里面的數字,讓數字乘以100才和標準的瀏覽器保持了一致
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;
}
3、通過檢測瀏覽器版本和類型來處理兼容
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;
}