js 獲取元素的具體樣式信息getcss(實例講解)
如果想獲取元素的某一個具體的樣式屬性值
1、元素.style.屬性名
需要我們把元素的樣式都寫在行內(nèi)樣式上才可以(寫在樣式表中是不管用的)
console.log(box.style.height) ->null
在真實項目中,這種方式不常用,因為不能為了獲取值而把所有的樣式都寫在行內(nèi)(無法實現(xiàn)html和css的分離)
2、使用window.getComputedStyle(當(dāng)前操作的元素對象,當(dāng)前元素的偽類【一般我們不用偽類寫null】)這個方法獲取所有經(jīng)過瀏覽器計算過的樣式
所有經(jīng)過瀏覽器計算過的樣式:只要當(dāng)前的元素標(biāo)簽可以在頁面中呈現(xiàn)出來,那么他的所有樣式都是經(jīng)過瀏覽器計算過的(渲染過的)->哪怕有些樣式你沒有寫,我們也可以獲取到
獲取的結(jié)果是CSSStyleDeclaration這個類的實例:包含了當(dāng)前元素的所有樣式屬性和值
console.log(window.getComputedStyle);//function
console.log(window.getComputedStyle(box,null))["height"]
3、方法雖然好用,但是在IE6-8下是不兼容的:因為window下沒有g(shù)etComputedStyle這個屬性->會報錯
在IE6-8下我們可以使用currentStyle來獲取所有經(jīng)過瀏覽器計算過的樣式
console.log(box.currentStyle)
console.log(box.currentStyle.height)
獲取樣式的兼容寫法getCss:獲取當(dāng)前元素所有經(jīng)過瀏覽器計算過的樣式中的[attr]對應(yīng)的值
/* curEle:[object] 當(dāng)前要操作的元素對象 attr:[string] 我們要獲取的樣式屬性的名稱 1、使用try、catch來處理兼容(只有在不得已的情況下) 前提:必須保證try中的代碼在不兼容的時候報錯,這樣才可以catch捕獲到錯誤信息,進(jìn)行其他的處理 不管當(dāng)前的瀏覽器是否支持這個方法,都需要把try中的代碼執(zhí)行一遍,如果當(dāng)前是IE7,window.getComputedStyle不兼容,但是也需要執(zhí)行一遍再執(zhí)行catch里面的代碼,執(zhí)行了兩遍,消耗性能, 2、判斷當(dāng)前瀏覽器中是否存在這個屬性或者方法,存在就兼容,不存在就不兼容 3、通過檢測瀏覽器版本和類型來處理兼容 window.navigator.userAgent 獲取當(dāng)前瀏覽器是IE6-8 */ function getCss(curEle,attr){ var val = null; //方法2 if("window.getComputedStyle" in window){//或者window.getComputedStyle var = window.getComputedStyle(curEle,null)[attr]; }else{ var = curEle.currentStyle[attr]; } //方法1 try{ var = window.getComputedStyle(curEle,null)[attr]; }catch(e){ var = curEle.currentStyle[attr]; } //方法3 if(/MSIE (6|7|8)/.test(navigator.userAgent)){ var = curEle.currentStyle[attr]; }else{ var = window.getComputedStyle(curEle,null)[attr]; } return val; }
console.log(getCss(box,"border")) console.log(getCss(box,"fontFamily"))
標(biāo)準(zhǔn)瀏覽器和IE瀏覽器獲取的結(jié)果還是不一樣的->對于部分樣式屬性,不同瀏覽器獲取的結(jié)果不一樣,主要是由于getComputedStyle和currentStyle在某些方面不一樣
對于復(fù)合的樣式值可以拆開來獲取
console.log(getCss(box,"marginTop"))
上面的getCss還沒有寫完,下面進(jìn)行第一次升級:把獲取的樣式值“單位去掉”(只有符合“數(shù)字+單位/數(shù)字”才可以使用parseFloat)
function getCss(curEle,attr){ var val = null; var reg = null; if(/MSIE (6|7|8)/.test(navigator.userAgent)){ var = curEle.currentStyle[attr]; }else{ var = window.getComputedStyle(curEle,null)[attr]; } reg = /^(-?\d+(\.\d+)?)(px|pt|rem|em)?$/i; return reg.test(val)?parseFloat(val):val; //這樣寫肯定不行,對于某些樣式屬性的值是不能去單位的,例如:float position margin padding border 這些復(fù)合值 background }
第二次升級:有些樣式屬性在不同的瀏覽器中是不兼容的,例如opacity
function getCss(curEle,attr){ var val = null; var reg = null; if(/MSIE (6|7|8)/.test(navigator.userAgent)){ if(attr==="opacity"){ val = curEle.currentStyle["filter"]; //把獲取到的結(jié)果剖析,獲取里面的數(shù)字,讓數(shù)字除以100才和標(biāo)準(zhǔn)瀏覽器保持一致 reg = /^alpha\(opacity=(\d+(?:\.\d+)?)\)$/i; val = reg.test(val)?reg.exec(val)[1]/100:1 }else{ val = curEle.currentStyle[attr]; } }else{ //如果傳遞進(jìn)來的結(jié)果是opacity,說明我想獲得的是透明度,但是在IE6-8下獲取透明度需要使用filter val = window.getComputedStyle(curEle,null)[attr]; } }
在補充一個小的知識點:偽類
:before :after 在一個元素便簽的前面或者后面創(chuàng)建一個新的虛擬標(biāo)簽,我們可以給這個虛擬標(biāo)簽增加樣式,也可以增加內(nèi)容等...也可以通過偽類來進(jìn)行清除浮動 可以通過如下方式獲取 window.getComputedStyle(box,"before").content
以上這篇js 獲取元素的具體樣式信息getcss(實例講解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
django js 實現(xiàn)表格動態(tài)標(biāo)序號的實例代碼
本文通過實例代碼給大家介紹了django js 實現(xiàn)表格動態(tài)標(biāo)序號 ,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07JS+CSS實現(xiàn)鼠標(biāo)滑過時動態(tài)翻滾的導(dǎo)航條效果
這篇文章主要介紹了JS+CSS實現(xiàn)鼠標(biāo)滑過時動態(tài)翻滾的導(dǎo)航條效果,涉及JavaScript動態(tài)設(shè)置css樣式動畫過度效果的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09Javascript中定義方法的另類寫法(批量定義js對象的方法)
用了很多的Javascript框架,偶爾也會去看一下框架的源碼,經(jīng)常會看到這樣的代碼。2011-02-02JavaScript實現(xiàn)經(jīng)典排序算法之選擇排序
這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)經(jīng)典排序算法之選擇排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12