行間樣式:元素內部用style定義的樣式,如:<div style="width:200px;"></div>
非行間樣式:在<style></style>內通過css定義的樣式
先看一段出問題的代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style>
div{
height: 100px;
width: 100px;
border: 2px solid black;
background: red;
}
</style>
<body>
<div id="div1" style="">
寬
</div>
</body>
<script type="text/javascript" >
window.onload =function(){
var oDiv1=document.getElementById('div1');
oDiv1.οnclick=function(){
oDiv1.style.width=200+'px';
}
}
</script>
</html>
我在頁面放了一個方塊,紅底黑邊,想通過點擊該方塊讓他的寬度變爲200px,看一下結果——沒有任何反應,也沒有報錯。
在事件中添加alert('a');有反應,說明onclick事件被觸發了,那麼就是
oDiv1.style.Width=200+'px';
這行代碼有問題。
打印一下這個這個變量:
alert(oDiv1.style.Width);
雖然不報錯,但是顯示空白,即使用變量賦值之後任然無法獲取這個值,真正的原因是style只能獲取行間樣式,試一下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style>
</style>
<body>
<div id="div1" style="height: 100px;
width: 100px;
border: 2px solid black;
background: red;">
寬
</div>
</body>
<script type="text/javascript" >
window.onload =function(){
var oDiv1=document.getElementById('div1');
oDiv1.οnclick=function(){
oDiv1.style.width=200+'px';
}
}
</script>
</html>
可以確定確實是行間樣式與非行間樣式的問題,實際上不可能把所有樣式都寫在行間。
要解決這個問題,需要引入兩個元素屬性——currentStyle和getComputedStyle(obj, false)
currentStyle——獲取非行間(當前樣式)IE瀏覽器專屬,chrome和FF不兼容。
getComputedStyle(obj, false)——獲取非行間(計算後的樣式)IE不兼容。
<script type="text/javascript" >
window.onload =function(){
var oDiv1=document.getElementById('div1');
oDiv1.οnclick=function(){
//FF、chrome
alert(getComputedStyle(oDiv1, false).width);
//IE
alert(oDiv1.currentStyle.width);
}
}
</script>
把他封裝一下寫成一個公用函數:
//obj:哪個元素
//attr:那個樣式
function getStyle(obj,attr){
if(obj.currentStyle){
//IE
return obj.currentStyel[attr];
}else{
//FF
return getComputedStyle(obj, false)[attr];
}
}
通過判斷obj.currentStyle是否爲真來判斷當前瀏覽器爲IE還是其他。
注意:.width的寫法可以寫成['width']