JS基础-DOM Node节点

本文介绍了如何使用JavaScript操作DOM节点,包括节点的增删改查及样式管理,并提供了选项选择和二级联动等实用示例。

DOM 节点

节点(Node)释义对象
文档节点整个文档Document 对象
元素节点每个HTML元素Eelement 对象
文本节点HTML元素内的文本Text 对象
属性节点每个HTML的属性Attribute 对象
注释节点文档的注释内容Comment 对象

Attributes属性节点

属性释义
nodeType节点类型
nodeValue节点值
nodeName节点名称
innerHTML节点(元素)的文本值

导航属性

属性释义
parentNode节点(元素)的父节点
firstChild节点下第一个子元素
lastChild节点下最后一个子元素
childNodes节点(元素)的子节点

Node标签的增删改查

方法
方法描述
createElement(name)创建元素
appendChild()添加元素
removeChild()删除元素

添加标签节点(createElement)和删除节点标签(removeChild)都是在父级节点上操作的

综合示例
<html>
 <head>
  <style>
		.div1 { width: 300px;height: 100%;color: #000;float: left;text-align: center;background-color: #FFCCCC;}
		div p { background-color: #fff;}
	</style>
 </head>
 <body>
  <div class="div1">
   <h3>Node的增删改查</h3>
   <button onclick="add()">添加标签</button>
   <button onclick="del()">删除标签</button>
   <button onclick="replace()">替换标签</button>
  </div>
  <script>
	var div_1 = document.getElementsByClassName("div1")[0];			//定位标签元素父级

	//添加节点标签函数
	function add(){
		var ele = document.createElement("p");						//定义创建标签元素
		ele.innerHTML="新增的 P 标签";								//添加标签元素内容
		div_1.appendChild(ele);										//定位标签中添加元素
					}

	//删除节点标签函数
	function del(){
		var div_p = div_1.getElementsByTagName("p")[0];				//定义删除的标签元素
		div_1.removeChild(div_p);									//定位标签中删除元素
					}

	//修改节点标签函数
	function replace(){
		var new_title = document.createElement("h2");				//定义创建要修改后的标签
		new_title.innerHTML="替换后的新标题"							//添加标签元素内容
		var old_title = document.getElementsByTagName("h3")[0];		//定义要修改的标签
		div_1.replaceChild(new_title,old_title);				    //进行调遣替换
				   }
</script>
 </body>
</html>

Node样式的增删改查

方法
方法描述
[ele].classList.add()添加样式
[ele].classList.remove()删除样式
[ele].style.[ClassName]修改样式

添加标签节点(classList.add)和删除节点标签(classList.remove)都是在当前节点上操作的

综合示例
<!DOCTYPE html>
<html>
 <head> 
  <style>
		.sty_1 { height: 200px;width: 200px;background-color: #FFCCCC;}
		.sty_2 { margin: auto;color: #FFF;line-height: 200px;text-align: center;}
	</style> 
 </head> 
 <body> 
  <div class="sty_1">
   this is test !!!
  </div> 
  <button onclick="add()">添加样式</button> 
  <button onclick="del()">删除样式</button> 
  <button onclick="cha()">修改样式</button> 
  <script>
	i = 0;
	var div_1 = document.getElementsByClassName("sty_1")[0];
	function add(){
			div_1.classList.add("sty_2");						//添加样式
	}
	function del(){
			div_1.classList.remove("sty_2")						//删除样式
	}
	function cha(){
			var val = ["#CCCCFF","#FFCC99","#99CCFF"];
			if (i < val.length -1){
				i++;
				div_1.style.backgroundColor=val[i];				//修改样式
			}
			else{
				i = 0;
				div_1.style.backgroundColor=val[i];				//修改样式
			}
	}
</script>  
 </body>
</html>

选项选择

<!DOCTYPE html>
<html>
<body>
	
<button onclick="SelectALL()">全选</button>
<button onclick="Cancel()">取消</button>
<button onclick="Reverse()">反选</button>

<div>
	<input type="checkbox"> 文本
	<input type="checkbox"> 文本
	<input type="checkbox"> 文本
</div>

<script>
	var inputs = document.getElementsByTagName("input");		//定义标签元素数组

	function SelectALL()
	{
		for (var i=0; i<inputs.length;i++)						//for循环数组
		{

			var input=inputs[i];								//循环位置对象
			input.checked=true;									//标记 true 状态
		}
	}

	function Cancel()
	{
		for (var i=0; i<inputs.length;i++)						//for循环数组
		{
			var input=inputs[i];								//循环位置对象
			input.checked=false;								//标记 false 状态
		}
	}
	function Reverse()
	{
		for (var i=0; i<inputs.length;i++)						//for循环数组
		{
			var input=inputs[i];								//循环位置对象
			input.checked=!input.checked;						//状态取反
		}
	}
</script>
</body>
</html>

二级联动

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<select id="provinces">
	<option>请选择省份</option>
</select>
<select id="citys">
	<option>请选择城市</option>
</select>

<script>
	data = {"上海市":["徐汇区","宝山区","浦东新区"],"北京市":["朝阳区","丰台区","昌平区"]}
	
	var pro_ele = document.getElementById("provinces");
	var city_ele = document.getElementById("citys");

	for (var i in data){									//遍历省份
		var ele = document.createElement("option");			//定义创建标签元素
		ele.innerHTML=i;									//添加标签元素内容
		pro_ele.appendChild(ele);							//定位标签中添加元素
	}

	pro_ele.onchange=function(){							//域的内容被改变触发事件
		var city_label = this.options[this.selectedIndex];	//通过 this 索引拿到当前选中项的省份标签
		var citys = data[city_label.innerHTML];				//通过省份标签拿到当前选中省份的城市

		city_ele.options.length=1;							//options 只保留第一个,避免不同省份城市累加

		for (var i=0;i<citys.length;i++){					//遍历当前选中省份所有的城市
			var ele = document.createElement("option");		//定义创建标签元素
			ele.innerHTML=citys[i];							//添加标签元素内容
			city_ele.appendChild(ele);						//定位标签中添加元素
		}
	}
</script>
</body>
</html>

转载于:https://my.oschina.net/zhaojunhui/blog/1860580

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值