1. 程式人生 > >JavaScript的DOM操作(01)

JavaScript的DOM操作(01)

JavaScript的DOM操作(01)

簡介

<script type="text/javascript">
	//1. 當整個 HTML 文件完全載入成功後觸發 window.onload 事件. 
	//事件觸發時, 執行後面 function 裡邊的函式體. 
	window.onload = function(){
		//2. 獲取所有的 button 節點. 並取得第一個元素
		var btn = document.getElementsByTagName("button")[0];
		//3. 為 button 的 onclick 事件賦值: 當點選 button 時, 執行函式體
		btn.onclick = function(){
			//4. 彈出 helloworld
			alert("helloworld");
		}
	}	
</script>

<body>
	
	<button>ClickMe</button>
	
</body>

1.如何獲取元素

<script type="text/javascript">
			
			//獲取指定的元素節點. 
			window.onload = function(){
				
				//1. 獲取 id 為 bj 的那個節點.
				//在編寫 HTML 文件時, 需確保 id 屬性值是唯一的. 
				//該方法為 document 物件的方法
				var bjNode = document.getElementById("bj");
				alert(bjNode);
				
				//2. 獲取所有的 li 節點. 
				//使用標籤名獲取指定節點的集合. 
				//該方法為 Node 介面的方法, 即任何一個節點都有這個方法. 
				var liNodes = document.getElementsByTagName("li");
				alert(liNodes.length);
				
				var cityNode = document.getElementById("city");
				var cityLiNodes = cityNode.getElementsByTagName("li");
				alert(cityLiNodes.length);
				
				//3. 根據 HTML 文件元素的 name 屬性名來獲取指定的節點的集合. 
				var genderNodes = document.getElementsByName("gender");
				alert(genderNodes.length);
				
				//若 HTML 元素自身沒有定義 name 屬性, 則 getElementsByName()
				//方法對於 IE 無效. 所以使用該方法時需謹慎. 
				var bjNode2 = document.getElementsByName("BeiJing");
				alert(bjNode2.length);
				
			}
			
		</script>

<body>
		<p>你喜歡哪個城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</li>
			<li>上海</li>
			<li>東京</li>
			<li>首爾</li>
		</ul>
		
		<br><br>
		<p>你喜歡哪款單機遊戲?</p>
		<ul id="game">
			<li id="rl">紅警</li>
			<li>實況</li>
			<li>極品飛車</li>
			<li>魔獸</li>
		</ul>
		
		<br><br>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	</body>

2.獲取屬性節點

<script type="text/javascript">
			
			//讀寫屬性節點: 通過元素節點 . 的方式來獲取屬性值和設定屬性值. 
			window.onload = function(){
				
				//屬性節點即為某一指定的元素節點的屬性. 
				//1. 先獲取指定的那個元素節點
				var nameNode = document.getElementById("name");
				
				//2. 再讀取指定屬性的值
				alert(nameNode.value);
				
				//3. 設定指定的屬性的值.
				nameNode.value = "xxx";
				
				//var nameAttr = nameNode.getAttributeNode("value");
				//alert(nameAttr);
				//alert("--" + nameAttr.nodeValue);
				//nameAttr.nodeValue = "xxx";
			}
			
		</script>
<body>
		<p>你喜歡哪個城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</li>
			<li>上海</li>
			<li>東京</li>
			<li>首爾</li>
		</ul>
		
		<br><br>
		<p>你喜歡哪款單機遊戲?</p>
		<ul id="game">
			<li id="rl">紅警</li>
			<li>實況</li>
			<li>極品飛車</li>
			<li>魔獸</li>
		</ul>
		
		<br><br>
		name: <input type="text" name="username" 
			id="name" value="xxx"/>
	</body>

3.獲取元素節點

<script type="text/javascript">
			
			//獲取元素節點的子節點
			window.onload = function(){
				
				//1. 獲取 #city 節點的所有子節點.
				var cityNode = document.getElementById("city");
				
				//2. 利用元素節點的 childNodes 方法可以獲取指定元素節點的所有子節點.
				//但該方法不實用. 
				alert(cityNode.childNodes.length);
				
				//3. 獲取 #city 節點的所有 li 子節點.
				var cityLiNodes = cityNode.getElementsByTagName("li");
				alert(cityLiNodes.length);
				
				//4. 獲取指定節點的第一個子節點和最後一個子節點. 
				alert(cityNode.firstChild);
				alert(cityNode.lastChild);
			}
			
		</script>
<body>
		<p>你喜歡哪個城市?</p>
		<ul id="city"><li id="bj" name="BeiJing">北京</li>
			<li>上海</li>
			<li>東京</li>
			<li>首爾</li>
		</ul>
		
		<br><br>
		<p>你喜歡哪款單機遊戲?</p>
		<ul id="game">
			<li id="rl">紅警</li>
			<li>實況</li>
			<li>極品飛車</li>
			<li>魔獸</li>
		</ul>
		
		<br><br>
		name: <input type="text" name="username" 
			id="name" value="atguigu"/>
	</body>

4.獲取文字節點

<script type="text/javascript">
			
			//獲取文字節點
			window.onload = function(){
				
				//文字節點一定是元素節點的子節點. 
				
				//1. 獲取文字節點所在的元素節點
				var bjNode = document.getElementById("bj");
				
				//2. 通過 firstChild 定義為到文字節點
				var bjTextNode = bjNode.firstChild;
				
				//3. 通過操作文字節點的 nodeValue 屬性來讀寫文字節點的值. 
				alert(bjTextNode.nodeValue);
				
				bjTextNode.nodeValue = "xxx";
				
				//alert(bjTextNode);
			}
			
		</script>
<body>
		<p>你喜歡哪個城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</li>
			<li>上海</li>
			<li>東京</li>
			<li>首爾</li>
		</ul>
		
		<br><br>
		<p>你喜歡哪款單機遊戲?</p>
		<ul id="game">
			<li id="rl">紅警</li>
			<li>實況</li>
			<li>極品飛車</li>
			<li>魔獸</li>
		</ul>
		
		<br><br>
		name: <input type="text" name="username" 
			id="name" value="xxx"/>
	</body>

5.關於節點的屬性: nodeType, nodeName, nodeValue

<script type="text/javascript">
			
			//關於節點的屬性: nodeType, nodeName, nodeValue
			//在文件中, 任何一個節點都有這 3 個屬性
			//而 id, name, value 是具體節點的屬性. 
			window.onload = function(){
				
				//1. 元素節點的這 3 個屬性
				var bjNode = document.getElementById("bj");
				alert(bjNode.nodeType); //元素節點: 1
				alert(bjNode.nodeName); //節點名: li
				alert(bjNode.nodeValue); //元素節點沒有 nodeValue 屬性值: null
				
				//2. 屬性節點
				var nameAttr = document.getElementById("name")
				                       .getAttributeNode("name");
				alert(nameAttr.nodeType); //屬性節點: 2
				alert(nameAttr.nodeName); //屬性節點的節點名: 屬性名
				alert(nameAttr.nodeValue); //屬性節點的 nodeValue 屬性值: 屬性值
				
				//3. 文字節點:
				var textNode = bjNode.firstChild;	
				alert(textNode.nodeType); //文字節點: 0
				alert(textNode.nodeName); //節點名: #text
				alert(textNode.nodeValue); //文字節點的 nodeValue 屬性值: 文字值本身. 
			
				//nodeType、nodeName 是隻讀的.
				//而 nodeValue 是可以被改變的。 
				//以上三個屬性, 只有在文字節點中使用 nodeValue 讀寫文字值時使用最多. 
			}
			
		</script>

<body>
		<p>你喜歡哪個城市?</p>
		<ul id="city">
			<li id="bj" name="BeiJing">北京</li>
			<li>上海</li>
			<li>東京</li>
			<li>首爾</li>
		</ul>
		
		<br><br>
		<p>你喜歡哪款單機遊戲?</p>
		<ul id="game">
			<li id="rl">紅警</li>
			<li>實況</li>
			<li>極品飛車</li>
			<li>魔獸</li>
		</ul>
		
		<br><br>
		name: <input type="text" name="username" 
			id="name" value="xxx"/>
	</body>

6.回顧一下

<script type="text/javascript">
			//1. 節點的型別: 元素節點、屬性節點、文字節點
			//通常情況下, 操作屬性節點直接通過 "元素節點.屬性名" 的方式來讀寫屬性值
			//而不是獲取屬性節點. 
			
			//2. 寫 JS 程式碼的位置
			//2.1 具體位置在哪
			//2.2 window.onload 事件被觸發的時間, 
			//以及如何為該事件賦值一個相應函式
			
			//3. 獲取獲取元素節點
			//3.1 根據 id 獲取
			//3.2 根據 標籤名 獲取: 該方法並非 document 物件所獨有, 任何元素節點
			//都可以呼叫該方法, 以獲取指定的子節點. 
			//3.3 根據 name 屬性名來獲取: 若 HTML 元素本身沒有 name 屬性, 
			//我們硬新增一個 name 屬性, 使用 getElementsByName(name)
			//對於 ie 是不好用的。 
			
			//4. 獲取子節點
			//4.1 childNodes 屬性: 獲取指定元素的所有子節點, 但不怎麼常用.
			//4.2 firstChild、lastChild 屬性: 獲取元素節點的文字節點(如果一個元素
			//		節點只有一個文字子節點). 
			//4.3 使用元素節點的 getElementsByTagName("方法");
			
			//5. 讀寫文字節點:
			//5.1 文字節點一定是元素節點的子節點
			//5.2 步驟: 獲取文字節點所在的元素節點 -> 利用 firstChild 獲取文字節點
			// -> 利用節點的 nodeValue 屬性來讀寫文字值. 
			
			//6. 節點的屬性: 所有節點都有的屬性(按元素節點, 屬性節點, 文字節點來說明)
			//6.1 nodeType: 1, 2, 3 只讀屬性
			//6.2 nodeName: 返回對應的節點的名字 只讀屬性
			//6.3 nodeValue: null, 屬性值, 文字值 可讀寫的屬性. 
			
			//7. 屬性節點: 
			//7.1 一般情況下不單獨獲取屬性節點, 
			//而是通過 元素節點.屬性名 的方式來讀寫屬性值	
				
			window.onload = function(){
				//彈出對話方塊. 
				//alert("helloworld");
				
				//var bjNode = document.getElementById("bj");
				//alert(bjNode);
				
				//var liNodes = document.getElementsByTagName("li");
				//alert(liNodes.length);
				
				//var genderNodes = document.getElementsByName("gender");
				//alert(genderNodes.length);
				
				//var bjNodes = document.getElementsByName("BeiJing");
				//alert(bjNodes.length);
				
				//var cityNode = document.getElementById("city");
				//var cityLiNodes = cityNode.getElementsByTagName("li");
				//alert(cityLiNodes.length); 
				
				//var liChildren = cityNode.childNodes;
				//alert(liChildren.length);
				
				//var cityFirstChild = cityNode.firstChild;
				//alert(cityFirstChild);
				
				//var bjNode = document.getElementById("bj");
				//alert(bjNode.firstChild.nodeValue);
				//bjNode.firstChild.nodeValue = "xxx";
				
				var nameNode = document.getElementsByName("username")[0];
				alert(nameNode.value);
				nameNode.value = "xxx";
			}
		
		</script>
<body>
		<p>你喜歡哪個城市?</p>
		<ul id="city"><li id="bj" name="BeiJing">北京</li>
			<li>上海</li>
			<li>東京</li>
			<li>首爾</li>
		</ul>
		
		<br><br>
		<p>你喜歡哪款單機遊戲?</p>
		<ul id="game">
			<li id="rl">紅警</li>
			<li>實況</li>
			<li>極品飛車</li>
			<li>魔獸</li>
		</ul>
		
		<br><br>
		gender: 
			<input type="radio" name="gender" value="male"/>Male
			<input type="radio" name="gender" value="female"/>Female
	
		<br><br>
		name: <input type="text" name="username" value="xxx"/>
		
	</body>