1. 程式人生 > >JavaScript修改DOM節點時,樣式優先級的問題

JavaScript修改DOM節點時,樣式優先級的問題

tro cti 設置 scrip classname 方法 class 沒有 color

  通過element.style.xxx設置或者讀取的xxx樣式屬性,都是屬於行間樣式(<p style="color=red"></p>),並不是 使用link的外部css文件 或者 在<style></style>標簽中定義的樣式

  樣式優先級: * < tagName < class < id < 行間(行間樣式就是寫在標簽內)

  下面這個代碼中

<html>
<head>
	<style>
		#div1{ width:100px; height:100px; border:1px solid blue;}
		.red{ background-color: red }
	</style>
</head>
<body>
	<div id="div1"></div>	
	<button onclick="changeToRed()">變紅</button>
	<button onclick="changeToYellow()">變黃</button>
</body>
<script>
	function changeToRed(){
		var div1 = document.getElementById("div1");
		div1.className = "red";
	}
	function changeToYellow(){
		var div1 = document.getElementById("div1");
		div1.style.backgroundColor = "yellow";
	}
</script>
</html>

觀察div的狀態變化:

  初始狀態為 <div id="div1"></div> 此時div內部為白色;

  先點擊變紅之後,變為 <div id="div1" class="red"></div> 此時div內部為紅色;

  再點擊變黃 ,變為 <div id="div1" class="red" style="background-color: yellow;"></div>,此時div內部顏色變為黃色,此時黃色為行間樣式,會覆蓋掉通過class或者id設置的同一個屬性(background-color)樣式。

刷新瀏覽器,改變順序: 

  初始狀態為 <div id="div1"></div> 此時div內部為白色;

  先點擊變黃 ,變為 <div id="div1" style="background-color: yellow;"></div>,此時div內部顏色變為黃色,此時黃色為行間樣式

  再點擊變黃之後,變為 <div id="div1" style="background-color: yellow;" class="red"></div> 此時div內部為仍為黃色,這是因為後添加的class屬性優先級沒有上一步添加的行間屬性的優先級高,所以不起作用。

建議:

  如果出現這種情況,非常頭疼,因為不報錯,所以很難查找 

  所以,盡量對同一個元素,更改樣式屬性的時候,只是用一種方法,要麽只使用element.style.xxx,要麽只是用element.className=‘xxx‘。

JavaScript修改DOM節點時,樣式優先級的問題