JavaScript征服Style的五種武器
在HTML的世界裡,對於一個元素來說,看的主要不是氣質,而是它的Style,因為Style決定了顏值。俗話說,JavaScript與Style,得其一者得天下。但是,Style永遠無法改變JavaScript,JavaScript卻可以征服Style。因為JavaScript有五種武器,所以可以對Style為所欲為,既可遠觀,亦可褻玩。
第一種武器是className
,在JavaScript,得到一個元素的className
就是得到了這個元素的class
屬性的值。Show Code:
<div id="box" class="one two"/>
<script>
var box = document.getElementById("box")
alert(box.className)
box.className += ' three'
</script>
上面的程式碼拿到box
的class
,然後又給它新增了一個three
。如果想去掉某個class
,只要通過字串操作去掉,然後重新給className
賦值就可以了。
第二種武器是style
,確切地說,這是個武器包,你幾乎可以用它修改所有style
。比如說你執行了box.style.width='100px'
,就相當於在box
上新增了一個style="width:100px"
。
對於那些由多個單片語成的style值,就是background-color
、marigin-top
之類的,要把橫線去掉,然後單詞的首字母大寫。對,改成像backgroundColor
、mariginTop
這樣。像-moz-border-radius
這種,也是把-
去掉,然後後面的字母換成大寫,就是改成MozBorderRadius
。
因為style屬性優先與css,所以你可以用style覆蓋掉css中設定的樣式,也可以把它設成空字串還原:
var box = document.getElementById("box")
box.style.width='100px'
box.style.width=''
上面的程式碼最終會保持box的width
不變。
第三種武器是cssText
,好吧,實際上它也是style中的一個屬性。但因為它很強大,所以我們特意提高了它的地位。用style.cssText
可以獲取和設定完整的style內容。
<div>Button</div>
<script>
var div = document.body.children[0]
div.style.cssText='color: red !important; \
background-color: yellow; \
width: 100px; \
text-align: center; \
blabla: 5; \
'
alert(div.style.cssText)
</script>
瀏覽器會對cssText
進行解析,然後把解析結果應用到元素上去。上面程式碼中那個不認識blabla就直接忽略掉了,不會報錯,所以要注意typo。
並且如果你想加!important
,只能用cssText
。
接下來要出場的,是真正重量級的兩種武器,或者說一又十分之一種武器。一種是標準的getComputedStyle
,另外一種是它的十分之一變種,自戀的M$IE專為自己打造的currentStyle
(哦,據說它的市場份額只有十分之一了嘛)。
在真實的頁面中,我們很少見到在元素的style
屬性中設定的樣式,所以用style
幾乎讀取不到任何元素的Style。比如下面這個例子:
<style>
body { margin: 10px }
</style>
<body>
<script>
alert(document.body.style.marginTop)
</script>
</body>
是得不到任何值的。
這種需求只能靠window.getComputedStyle
來解決,這個方法是DOM Level 2的標準方法,所有瀏覽器(除了IE < 9)都支援。
所以要獲取上面那個例子中的marginTop,以及所有在瀏覽器給元素應用了style和樣式表之後的Style,都可以像下面這樣:
<style>
body { margin: 10px }
</style>
<body>
<script>
var computedStyle = getComputedStyle(document.body, null)
alert(computedStyle.marginTop)
</script>
</body>
至於IE 9之前的瀏覽器,就得用currentStyle
讀取了。或者像這樣:
<style>
body { margin: 10% }
</style>
<body>
<script>
if (window.getComputedStyle) {
var computedStyle = getComputedStyle(document.body, null)
} else {
computedStyle = document.body.currentStyle
}
alert(computedStyle.marginTop)
</script>
</body>
好了,上面就是JavaScript征服Style的五種武器。不過我是隻用前面四種武器的,既然使用者到現在還用IE < 9的瀏覽器,我覺得真的無力服侍好啊,所以還是逃吧。
宣告:本文參考(抄襲)了Styles and classes, getComputedStyle
相關文章
- 打造自己的JavaScript武器庫JavaScript
- JavaScript style 屬性JavaScript
- 迴歸分析的七種武器
- 執行七種武器
- 征服 JavaScript 面試:什麼是閉包JavaScript面試
- [Javascript] Refactor blocking style code to stream style for fetching the stream dataJavaScriptBloC
- 保護資料安全的三種武器
- PHP程式猿必備的七種武器PHP
- 專案經理的七種武器(轉)
- Airbnb Javascript Style 閱讀註解AIJavaScript
- JavaScript 動態建立style標籤JavaScript
- 征服 JavaScript 面試:什麼是純函式?JavaScript面試函式
- 為什麼JavaScript也將征服VR世界JavaScriptVR
- 如果程式語言是種武器
- JavaScript 偵測手機瀏覽器的五種方法JavaScript瀏覽器
- C#後臺呼叫前臺javascript的五種方法C#JavaScript
- javascript使用style方式設定元素的樣式JavaScript
- 介紹敏捷開發的七種主流武器敏捷
- Web應用中快取的七種武器Web快取
- 征服 JavaScript 面試:什麼是函式組合JavaScript面試函式
- 征服 JavaScript 面試:類繼承和原型繼承的區別JavaScript面試繼承原型
- 成為 Linux 終端高手的七種武器Linux
- 趣文:如果程式語言是種武器
- 六種營銷武器特性與使用技巧
- 打造自己的 JavaScript 武器庫(轉自SegmentFault公眾號)JavaScript
- 讓 Python 程式碼更易維護的七種武器Python
- 縱橫於Windows執行命令的七種武器(轉)Windows
- 程式設計:Java抽取Word,PDF的四種武器(轉)程式設計Java
- 學習筆記 ProgressBar三種style 水平兩種寫法筆記
- Javascript判斷資料型別的五種方式及其特殊性JavaScript資料型別
- QuestMobile:APP運營七種武器之“多情環”APP
- Tungsten Fabric入門寶典丨TF元件的七種“武器”元件
- 成為 Linux 運維高手必備的七種“武器”!Linux運維
- web應用中使用快取提升效能的8種武器Web快取
- 征服 JavaScript 面試:什麼是函數語言程式設計?JavaScript面試函數程式設計
- 網際網路七種武器改造企業軟體業
- 程式設計師應知:你有幾種武器程式設計師
- list-style與list-style-type的區別