DOM(文檔對象模型)--1獲取節點、節點的增刪改

1.頁面文檔中一共存在3種節點: 標籤、屬性、文本內容

 1)標籤節點:類型值爲1
 2)屬性節點:類型值爲2
 3)文本內容節點:類型值爲3

2.每個節點有三個固定屬性:

1)節點名稱(nodeName)

2)節點類型(nodeType)

3)節點值(nodeValue)

4)標籤節點是沒有值(nodeValue)的---值爲null, 只胡屬性節點和文本內容節點有值  

HTML DOM Tree 實例


通過 HTML DOM,樹中的所有節點均可通過 JavaScript 進行訪問。所有 HTML 元素(節點)均可被修改,也可以創建或刪除節點。

從上面的 HTML 中:

  • <html> 節點沒有父節點;它是根節點
  • <head> 和 <body> 的父節點是 <html> 節點

並且:

  • <html> 節點擁有兩個子節點:<head> 和 <body>
  • <head> 節點擁有一個子節點:<title> 節點
  • <title> 節點也擁有一個子節點:文本節點 "文檔標題"
  • <h1> 和 <a> 節點是同胞節點,同時也是 <body> 的子節點
  • <h1>節點也擁有一個子節點:文本節點 "我的標題"
  • <a>節點擁有兩個子節點:屬性節點 "href"、文本節點"我的鏈接"

並且:

  • <head> 元素是 <html> 元素的首個子節點
  • <body> 元素是 <html> 元素的最後一個子節點
  • <a> 元素是 <body> 元素的首個子節點
  • <h1> 元素是 <body> 元素的最後一個子節點

3. 獲取節點的三種方式: 

 1) 通過id: document.getElementById()方法  --返回一個節點對象
 2) 通過name: document.getElementsByName()方法    --返回一個節點集合
 3) 通過標籤名: document.getElementsByTagName()方法   --返回一個節點集合
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
		<!--
			 1.每個結點都有三個固定屬性:節點名稱(nodeName),節點類型(nodeType),節點的值(nodeValue)
			 2.頁面文檔中一共存在3種節點:標籤、屬性、文本內容
			 	1)標籤節點:類型值爲1
			 	2)屬性節點:類型值爲2
				3)文本內容節點:類型值爲3
				4)標籤節點是沒有值(nodeValue),只有屬性節點和文本內容節點有值
			 3.獲取節點的3種方式:
			 	1)通過id:getElementById()方法		--返回一個結點
			 	2)通過name:getElementByName()方法	--返回一個集合
			 	3)通過標籤名:getElementByTagName()方法	--返回一個集合
		 -->
		<script type="text/javascript">
			function t1(){
				//1.通過id獲取
				var oDiv1=document.getElementById("div1");
				//document.writeln("aaa");			//不能在方法內輸出到文檔對象,否則把頁面內容充掉,後面就無法再獲取下面的頁面內容了
				alert(oDiv1.nodeName+","+oDiv1.nodeType+","+oDiv1.nodeValue);//DIV,1,null
				var txtNode=oDiv1.childNodes[0];	//獲取div節點中的第一個孩子節點
				alert(txtNode.nodeName+","+txtNode.nodeType+","+txtNode.nodeValue);	//#text,3,0000
				
				//獲取div標籤中的id屬性節點
				//var oIdPro=oDiv1.getAttribute("id");
				var oIdPro=oDiv1.attributes[0];
				alert(oIdPro.nodeName+","+oIdPro.nodeType+","+oIdPro.nodeValue);	//id,2,div1
			}
			
			function t2(){
				//2.通過name獲取
				var oInputName=document.getElementsByName("name")[0];
				oInputName.value="dragon";
			}
			function t3(){
				//3.通過標籤名獲取
				var oInputName=document.getElementsByTagName("input")[4];
				oInputName.value="1234";
			}
		</script>
	</head>
	
	<body>
		<h1>從document對象獲取結點:3中方式</h1>
		<script type="text/javascript">
		
		</script>
		<input type="button" value="通過id獲取" οnclick="t1();"/>
		<input type="button" value="通過name屬性獲取" οnclick="t2();"/>
		<input type="button" value="通過標籤名獲取" οnclick="t3();"/>
		<br/>
		<div id="div1">0000</div>
		<form action="">
			姓名:<input type="text" name="name"/> <br/>
			密碼:<input type="password" name="pwd"/> <br/>
			<input type="submit" value="登陸"/>
		</form>
	
	</body>
</html>

4.對節點進行增刪改

1.添加一個標籤節點

1)document.createElement() 

2)node.innerText 或node.innerHTML

2.刪除一個節點

1)obj.removeNode(boo)  自己調用removeNode--boo表示是否刪除其子樹

2)parentNode.removeChild(obj) 父節點調用removeChild

3.修改(替換)一個節點

parentNode.replaceChild(newChild, oldChild)--用newChild替換oldChild

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
		<style type="text/css">
			div{
				border: red solid 1px;
				width: 200px;
				padding: 30px;
				margin: 20px;
			}
		
		</style>
	</head>
	
	<body>
		<h1>演示節點的增刪改查--CRUD</h1>
		<div id="div1">1111111111111</div>
		<div id="div2">2222222222222</div>
		<div id="div3">3333333333333</div>
		<hr/>
		<input type="button" value="創建並添加新節點" οnclick="createAndAdd1();">
		<script type="text/javascript">
			function createAndAdd1(){
				//創建一個文本對象
				var oTxtNode = document.createTextNode("創建了一個文本對象");
				var oDiv=document.getElementById("div1");
				oDiv.appendChild(oTxtNode);
			}
		</script>
		
		<input type="button" value="創建並添加新節點2" οnclick="createAndAdd2();">
		<script type="text/javascript">
			//添加一個標籤節點--document.createElement()
			function createAndAdd2(){
				//創建一個元素
				var oInputNode = document.createElement("input");
				oInputNode.type="button";
				oInputNode.value="一個新按鈕";
				
				var oDiv=document.getElementById("div1");
				oDiv.appendChild(oInputNode);
			}
		</script>
		
		<input type="button" value="創建並添加新節點3" οnclick="createAndAdd3();">
		<script type="text/javascript">
			//添加一個標籤節點--node.innerText 或node.innerHTML
			function createAndAdd3(){
				var str="000000";
				var oDivNode=document.getElementById("div1");
				
				//oDivNode.innerText=oDivNode.innerText+str;
				//oDivNode.innerHTML+="<input type='button' value='新按鈕'>";
				oDivNode.innerHTML+="<a href='http://my.csdn.net/?ref=toolbar' target='_blank'>我的博客</a>";	//
			}
		</script>
		
		<br/>
		<input type="button" value="刪除div2中的節點" οnclick="delNode();">
		<script type="text/javascript">
			function delNode(){
				var oDiv2=document.getElementById("div2");
				/*	//自殺
					oDiv2.removeNode();		//默認爲false,只刪當前節點,不刪孩子節點,並且長兄作爲父親
					oDiv2.removeNode(true);	//連子樹一起刪除
				*/
				
				//父殺   建議使用這種方法
				oDiv2.parentNode.removeChild(oDiv2);
			}
		</script>
		<br/>
		<input type="button" value="修改div2中的節點" οnclick="updateNode();">
		<script type="text/javascript">
			function updateNode(){
				var oDiv1=document.getElementById("div1");
				var oDiv2=document.getElementById("div2");
				
				//把div1節點替換爲div2節點,這裏是移動替換,div2節點會沒有
				oDiv1.parentNode.replaceChild(oDiv2, oDiv1);
			}
		</script>
		
		<br/>
		<input type="button" value="複製修改div2中的節點" οnclick="updateNode2();">
		<script type="text/javascript">
			function updateNode2(){
				var oDiv1=document.getElementById("div1");
				var oDiv2=document.getElementById("div2");
				
				//先把div2克隆
				var oDiv=oDiv2.cloneNode(true);
				//在用父親換
				oDiv1.parentNode.replaceChild(oDiv, oDiv1);
			}
		</script>
	</body>
</html>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章