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‘。

原文地址:https://www.cnblogs.com/-beyond/p/8502578.html

时间: 2024-10-14 21:15:50

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

JavaScript操作DOM节点

DOM (文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM.Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在JavaScript与JScript一决生死,于是大规模的赋予浏览器强大的功能.

JS 操作Dom节点之样式

为了提高用户体验,我们经常会动态修改Dom节点的样式,各种浏览器差异比较大,我们如何应对?不断尝试,不断总结~! 1. style.getComputedStyle.currentStyle 内嵌样式: <!--body --><div style="width: 30px;background-color: #ff6a00;">我就是傻里傻气的,完全素颜!</div> 1 //内联样式优先级最高,通过style获取的样式是最准确的 2 var el

JavaScript获取DOM节点HTML元素CSS样式

JavaScript获取DOM节点HTML元素CSS样式技术 maybe yes 发表于2015-01-10 18:07 原文链接 : http://blog.lmlphp.com/archives/59  来自 : LMLPHP后院 如何使用 JavaScript 获取某个 DOM 节点下 HTML 元素的 CSS 样式值?使用过 JQuery 的童鞋一定都非常的熟悉,Jquery 提供了非常强大的 CSS 方法,可以很方便的设置和获取元素的 style 属性. 某些情况下,我们不能使用 JQ

问题:修改文本节点时字符串会经过HTML编码?

今天学JavaScript的DOM时,看到Text属性时,书中有段话: 如果这个文本节点当前存在于文档树中,那么修改文本节点的结果就会立即得到反映.另外,在修改文本节点时还要注意,此时的字符串会经过HTML(或XML,取决于文档类型)编码.换句话说,小于号,大于号或引号都会被转义. 即:div.firstChild.nodeValue = "Some <strong>other</strong> message"; 的输出结果是:"Some <s

使用JavaScript操作DOM节点元素的常用方法(创建/删除/替换/复制等)

getElementById(id)这是通过id来访问某一元素,最常用的之一,例:<html><body><div id="myid">test</div><script language="javascript">alert(document.getElementById("myid").innerHTML);</script></body></html&

javascript与DOM节点的结合使用

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM.Document Object Model的历史可以追溯至1990年代后期微软与Netscape的"浏览器大战",双方为了在JavaScript与JScript一决生死,于是大规模的赋予浏览器强大的功能.微软在网页技术上加入了不少专属事物,既有VBScript.Ac

Javascript:DOM 节点(新建HTML元素/删除HTML元素)

使用DOM可以新建HTML元素,也可以删除已有的HTML元素. 代码整理自w3school:http://www.w3school.com.cn (一)新建元素: <script> //创建新的 <p> 元素 var newEle=document.createElement("p"); //创建文本节点 var node=document.createTextNode("这是使用Javascript创建的新段落."); //将文本节点添加到

【Javascript】 DOM节点

HTML文档中一切都是节点! 整个文档是文档节点: 注释是注释节点: 每一个HTML元素都是一个元素节点: 元素内的文本内容是文本节点: 连元素的每一个属性都是一个属性节点. 看到这些是不是感觉很熟悉,没错,就像JS中一切都是对象一样,HTML文档中一切都是节点.   我们可以使用各种访问节点的方法,对任意一个节点进行增删改查等等操作.从而达到对整个页面的各种操作. 增: 如果要向HTML添加一个元素,需要先创建一个元素(元素节点),然后再将其追加到已有的元素上. 创建元素节点newNode:

JavaScript函数使用和DOM节点

一.函数的声明与调用 1.函数声明的格式: function 函数名(参数1, 参数2,....){ 函数体代码 return 返回值:} 2.函数的调用:①直接调用:函数名(参数1的值,参数2的值,....);②事件调用方式:再HTMl标签中,使用事件名="函数名()"<button ondblclick="saySth('按钮','yellow')">点击按钮,打印内容</button> 3.函数的注意事项:①函数名必须符合小驼峰法则!!