005 dom


<!--
	
dom(document object mode)树	
		                 document
		                       |
		                  html
		                       |
		     head                    body 
		        |                 h1               a
		     title               |                  |
		                       文本             文本
	
	<body>
		 <h1>天帝</h1>
		  <a href="#">哈哈</a>
	</body>
	
	body是html的子节点,h1是body的子节点
	天帝是h1的子节点,因为天帝是h1的结构体内的
	a是body的子节点,哈哈是a的子节点,因为哈哈是a的结构体内的
	
	href是 a的附属节点
	     

dom操作
通过js对内存中的dom树上的节点进行增删改查的操作,间接操作就是html文旦

document.getElementById("ID名") 根据这个ID获取节点对象
document.getElementsByTagName("标签名")  根据标签名获取多个节点对象,返回一个数组
document.getElementsByName("name")  根据name获取多个节点对象,返回一个数组

hasChildNodes() 是否有子节点
父节点.removeChild(子节点) 移除子节点
父节点.replaceChild(我的节点,目标节点) 替换(剪贴)  父节点是  目标节点  的父节点
document.createElement("标签") 创建一个元素
appendChild(子节点)  子节点是由我们自己创建的元素,把这个元素加入到节点当中
insertBefore(我的节点,目标节点) 插入目标节点前面



注意:
1 document也是一个对象,不过是整个文档的对象
2 getElementsByTagName想要获取一块地方的标签名的节点对象,就必须在这块地方的父标签处写上ID,先获取标签父对象
   再用  父对象.getElementsByTagName
3 获取下拉框select默认选中对象selected,可以先用getElementsByTagName获取全部节点对象,然后再遍历
    然后再if(options[i].selected){}   selected是返回true和false,如果遍历到了选中了,就会返回true,就可以进行操作了
 4 this表示的是触发此事件的对象 
 5 "自杀方法":  子节点.ParentElement.removeChild(子节点),ParentElement是父节点

-->


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>荒天帝</title>
		<script>
			
			function addText()
			{
				//获取父节点id
				var div1=document.getElementById("div1")
				//创建元素节点
				var p1=document.createElement("p")
				//创建文本节点
				var text=document.createTextNode("荒天帝")
				//把文本节点添加到p节点里
				p1.appendChild(text)
				//再把p节点添加到div1里
				div1.appendChild(p1)
			}
			
			
		</script>
		
	</head>
	<body >
		<input type="button"  value="添加文本" onclick="addText()"/>
		<div id="div1">
			
		</div>
	</body>
	
</html>

dom案例



<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>荒天帝</title>
		<script>
					
		//省市联动
		var arr=[
			["南昌","贵溪"],
			["丽水","台山"]
		];			
		
		function changeCity()
		{

		  var prov=document.getElementById("prov")
			var mycity=document.getElementById("city")
			//mycity.innerHTML="<option>请选择市</option>"  //重新初始化子节点	
			mycity.options.length=0    //直接把options的length置0,也可以达到清空的目的,看清楚是options而不是option
			
			var value=prov.value //这个value就是我们指定的0,1,2
			var cities=arr[value]
			for(var i=0;i<cities.length;i++)
			{
			   var cityText=cities[i]
			   
			   //创建option节点
			   var option1=document.createElement("option")
			   var textNode=document.createTextNode(cityText)
			   option1.appendChild(textNode)
			   mycity.appendChild(option1)
			}
			
		}
					
		</script>
		
	</head>
	<body >
		<!--失去焦点,弹出编辑框内的内容-->
<!--		<input type="text"  value="" /><br>
		<input type="text" value=""/><br>
		<input type="text" value=""/>-->
		
		<!--省市联动-->
	   <select  onchange="changeCity()" id="prov">  <!-- select的value等于option的value,因为这样符合提交表单的需求-->	
		<option value="">请选择省</option>
		 <option value="0">江西</option>
		 <option value="1">浙江</option>
		</select> 

	   <select id="city"> 
		<option >请选择市</option>  
		</select>

	</body>
	
	<script>
	
	<!--失去焦点,弹出编辑框内的内容-->
	//给每个input绑定事件	
// 	var inputs=document.getElementsByTagName("input");	
// 	for(var i=0;i<inputs.length;i++) //有3个文本框
// 	{
// 		inputs[i].onchange=function()
// 		{
// //		 	   	  alert(inputs[i].value); 注意这里是不行的
// //  代码从上到下执行到这里,因为有3个文本框,所以是循环3次,下标是2(0,1,2),当循环完3次后,i++,i此时是3
// //  再判断是否i<3,很明显i是3不小于3,所以不再执行循环。而你修改内容后触发事件的时候,没有弹框出来,为什么?
// //  那是因为此时 下标是3,超出下标了,如果是java会报异常,但是js不会。所以肯定不能这样写inputs[i]
// //  但是如果写inputs[i-1]呢,很明显会弹框,但是弹的框是第3个框,因为此时下标是2,而且永远都是弹第3个。
// //  所以要写this.value ,this表示的是触发此事件的对象。如果你修改第一个框,那么就是触发了下标为0时绑定的对象
// //  那么就会弹出第一个框的内容
// 
// 			alert(this.value);
// 		}
// 	}
		
	</script>
	
</html>

猜你喜欢

转载自blog.csdn.net/yzj17025693/article/details/81184729
005
DOM