jQuery爲什麼受歡迎,其中緣由之一就是方法名稱比較短。比如打架同樣,塊頭大的潛意識認爲厲害,就不禁得心生畏懼,遠而避之;小個子(或村婦,小孩)嘛,天然覺得是軟豆腐,願意接受做爲對手。 php
所以,當看到相似getComputedStyle這麼長的方法名的時候,咱們身體裏那個懶惰小人忽然就醒了:哎喲喲,這東西,就跟放心食品同樣,幾年才見一回。看上去又蠻複雜,想到晚上還要跟妹子聊天。這東西,就讓它從旁邊過吧,反正不會掉塊肉的。
網上不是有這麼個段子嘛:可怕的是,比你聰明的人比你更勤奮。那麼,這裏的「勤奮」的差別體如今什麼地方呢?就拿這個getComputedStyle舉例:懶惰青年是看一下,立馬像看見鳳姐同樣視線離開;普通青年是看一下,發現本身不瞭解,百一下或谷一下,熟悉瞭解之;勤奮青年是不只瞭解,還抽出時間實踐之(如作個簡單demo測試),熟悉方法的特異性,驗證一些觀點正確性。
您能夠按照你如今的心理狀態看看你是哪類青年:若是此時,您已經對本文的內容沒有興趣了(固然,您的工做與JS關係親密),您是……(你懂的);若是您看完本文內容,發現,仍是有很多收穫,心中回味下,而後ctrl+w去其餘地方覓食,再也不回來,那您是普通青年;若是您看完本文,而後對所說的一些內容做了額外的測試,例如IE9瀏覽器是否支持測試等,並經過評論形式指出可能的錯誤,不得不說您是勤奮青年,假以時日,必有一番技術做爲。從我文章的些評論來看,有很多同行就是這樣的勤奮人兒。
の, 很久沒寫文章,話又多了,打住,進入正題。 css
getComputedStyle() gives the final used values of all the CSS properties of an element.
語法以下: html
var style = window.getComputedStyle("元素", "僞類");例如:
var dom = document.getElementById("test"), style = window.getComputedStyle(dom , ":after");就兩個參數,你們都懂中文的,沒什麼好說的。只是額外提示下:Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) 以前,第二個參數「僞類」是必需的(若是不是僞類,設置爲null),不過如今嘛,不是必需參數了。
咱們使用element.style也能夠獲取元素的CSS樣式聲明對象,可是其與getComputedStyle方法還有有一些差別的。
jquery
若是咱們查看jQuery源代碼,會發現,其css()方法實現不是使用的window.getComputedStyle而是document.defaultView.getComputedStyle,唷?這是怎麼一回事?
git
實際上,使用defaultView基本上是沒有必要的,getComputedStyle自己就存在window對象之中。根據DennisHall的說法,使用defaultView可能一是人們不太樂意在window上專門寫個東西,二是讓API在Java中也可用(這我不懂,忘指點~~)。
不過有個特殊狀況,在FireFox3.6上不使用defaultView方法就搞不定的,就是訪問框架(frame)的樣式.
github
Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari | |
---|---|---|---|---|---|
基本支持 | ![]() |
![]() |
9 | ![]() |
![]() |
僞類元素支持 | ![]() |
![]() |
![]() |
![]() |
![]() |
對於手機設備: 瀏覽器
Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | |
---|---|---|---|---|---|
基本支持 | ![]() |
![]() |
WP7 Mango | ![]() |
![]() |
僞元素支持 | ? | ? | ![]() |
? | ? |
alert((element.currentStyle? element.currentStyle : window.getComputedStyle(element, null)).height);您能夠狠狠地點擊這裏:使用getComputedStyle和currentStyle 獲取元素高度demo
結果FireFox下顯示24px(通過計算了), 而IE瀏覽器下則是CSS中的2em屬性值: 框架
仔細對比查看,咱們能夠看到很多差別,例如浮動屬性,FireFox瀏覽器下是這個(cssFloat): dom
IE7瀏覽器下則是styleFloat : 學習
而IE9瀏覽器下則是cssFloat和styleFloat都有。
等其餘N多差別。
window.getComputedStyle(element, null).getPropertyValue("float");若是咱們不使用getPropertyValue方法,直接使用鍵值訪問,其實也是能夠的。可是,好比這裏的的float,若是使用鍵值訪問,則不能直接使用getComputedStyle(element, null).float,而應該是cssFloat與styleFloat,天然須要瀏覽器判斷了,比較折騰!
Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari | |
---|---|---|---|---|---|
基本支持 | ![]() |
![]() |
9 | ![]() |
![]() |
style.getAttribute("float");注意到沒,使用getAttribute方法也不須要cssFloat與styleFloat的怪異寫法與兼容性處理。不過,仍是有一點差別的,就是屬性名須要駝峯寫法,以下:
style.getAttribute("backgroundColor");若是不考慮IE6瀏覽器,貌似也是能夠這麼寫:
style.getAttribute("background-color");實例纔是王道,您能夠狠狠地點擊這裏: getPropertyValue和getAttribute獲取背景色demo
對於IE9瀏覽器,雖然應用的是currentStyle, 可是從結果上來說,currentStyle返回的對象是徹底支持getPropertyValue方法的。