JavaScript修改DOM节点时,样式优先级的问题

Posted 寻觅beyond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript修改DOM节点时,样式优先级的问题相关的知识,希望对你有一定的参考价值。

  通过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节点时,样式优先级的问题的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript基础语法-DOM,前端小白必知必会

JavaScript之jQuery-3 jQuery操作DOM(查询样式操作遍历节点创建插入删除替换复制)

JavaScript基础之DOM修改样式

JavaScript DOM API的使用

javaScript文档对象模型

JS DOM基础 操作属性类CSS样式