DOM


1.DOM簡介

全稱Document Object Model,即文檔對象模型。
DOM描繪了一個層次化的樹,允許開發人員添加、刪除、修改頁面的某一部分。

瀏覽器在解析HTML頁面標記的時候,是將HTML頁面中的每一個標記按照順序在內存中組建一顆DOM樹,組建好之后,按照樹的結構將頁面顯示在瀏覽器的窗口中。

2.節點層次

HTML網頁是可以看做是一個樹狀的結構,如下:
html
|-- head
| |-- title
| |-- meta
| ...
|-- body
| |-- div
| |-- form
| | |-- input
| | |-- textarea
... ... ...
這是一顆樹,是由多個節點(Node)組成的,節點的類型有很多種。
節點最多有一個父節點,可以有多個子節點。

    HTML DOM 定義了訪問和操作HTML文檔的標准方法。
document
	代表當前頁面的整個文檔樹。
訪問屬性
	all
	images
	links

2.document入門

該對象代表整個文檔頁面

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<img src="" alt="這是圖片" />
		<img src="" alt="這是圖片" />
		<img src="" alt="這是圖片" />
		
		<input type="button" value="設置圖片" onclick="setImg()" />
		
		<a href="#">百度1</a>
		<a href="#">百度2</a>
		<a href="#">百度3</a>
		
		<input type="button" value="設置a標簽" onclick="setA()" />
	</body>
	
	<script>
		/*
		DOM(Document Object Model) 文檔對象模型
				
		一個html頁面被瀏覽器加載的時候,瀏覽器就會對整個html頁面上的所有標簽都會創建一個對應的
		對象進行描述,我在瀏覽器上看到的信息只不過就是這些html對象的屬性信息而已。我們只要能找到
		應的對象操作對象的屬性,則可以改變瀏覽器當前顯示的內容。  	
		*/
		
		//獲取當前頁面所有標簽對象
		var allNodes = document.all;
		
		for(var i= 0;i<allNodes.length;i++){
			//document.write(allNodes[i]+"---");
			//nodeName:節點名稱
			document.write(allNodes[i].nodeName+"---");
		}
		
		function setImg(){
			var allImgNodes = document.images;
			
			for(var i= 0;i<allImgNodes.length;i++){
				allImgNodes[i].src="img/2.jpg";
				allImgNodes[i].width = 200;
				allImgNodes[i].height = 200;
			}
		}
		
		function setA(){
			var aNodes = document.links;
			
			for(var i= 0;i<aNodes.length;i++){
				aNodes[i].href="http://www.baidu.com";
			}
		}
		
	</script>
</html>

3.根據html標簽的屬性找節點

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
	
		用戶名:<input type="text" id="username" />
		<input type="button" value="設置用戶名" onclick="setUserName()" />
		<hr>
		
		<img src="" alt="這是圖片1" />
		<img src="" alt="這是圖片2" class="imgs" />
		<img src="" alt="這是圖片3" class="imgs" />
		<input type="button" value="設置圖片" onclick="setImgs()" />
		<hr>
		
		<div>div1</div>
		<div>div2</div>
		<div>div3</div>
		<input type="button" value="設置div" onclick="setDivs()" />
		<hr>
		
		<span name="span">span1</span>
		<span name="span">span2</span>
		<span name="span">span3</span>
		<input type="button" value="設置span" onclick="setSpans()" />
		<hr>
	
	</body>
	
	<script>
		/*
		通過html元素的標簽屬性找節點。
			document.getElementById("html元素的id屬性值") 
			document.getElementsByTagName("標簽名") 
			document.getElementsByName("html元素的name屬性值")
			document.getElementsByClassName("html元素的class屬性值")
		*/
	
		function setUserName(){
			//通過id屬性獲取標簽對象
			var usernameNode = document.getElementById("username");
			usernameNode.value="jack";
		}
		
		function setImgs(){
			//通過class屬性獲取標簽對象(返回的是一個數組)
			var imgNodes= document.getElementsByClassName("imgs");
			
			for(var i= 0;i<imgNodes.length;i++){
				imgNodes[i].src="img/2.jpg";
				imgNodes[i].width = 200;
				imgNodes[i].height = 200;
			}
		}
		
		function setDivs(){
			//通過標簽名獲取標簽對象(返回的是一個數組)
			var divNodes= document.getElementsByTagName("div");
			
			for(var i= 0;i<divNodes.length;i++){
				divNodes[i].innerHTML = "div標簽".fontcolor("red");
			}
		}
		
		function setSpans(){
			//通過name屬性獲取標簽對象(返回的是一個數組)
			var spanNodes= document.getElementsByName("span");
			
			for(var i= 0;i<spanNodes.length;i++){
				spanNodes[i].innerHTML = "span標簽".fontcolor("red");
			}
		}
		
		
	</script>
</html>

4.根據屬性找標簽練習

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title></title>
		<script type="text/javascript">
			function checkAll() {
				//找到所有的的選項
				var items = document.getElementsByName("item");
				//找到全選按鈕的對象
				var allNode = document.getElementsByName("all")[0];
				for (var i = 0; i < items.length; i++) {
					items[i].checked = allNode.checked;
				}
			}

			function getSum() {
				var items = document.getElementsByName("item");
				var sum = 0;
				for (var i = 0; i < items.length; i++) {
					if (items[i].checked) {
						sum += parseInt(items[i].value);
					}
				}

				var spanNode = document.getElementById("sumid");
				spanNode.innerHTML = ("&nbsp;&nbsp;&nbsp;&yen;" + sum).fontcolor("green");
			}
		</script>
	</head>

	<body>
		<div>商品列表</div>
		<input type="checkbox" name="item" value="3000" />筆記本
電腦3000元<br />
		<input type="checkbox" name="item" value="3000" />筆記本電腦3000元<br />
		<input type="checkbox" name="item" value="3000" />筆記本
電腦3000元<br />
		<input type="checkbox" name="item" value="3000" />筆記本電腦3000元<br />
		<input type="checkbox" name="item" value="3000" />筆記本電腦3000元<br />
		<input type="checkbox" name="item" value="3000" />筆記本電腦3000元<br />
		<input type="checkbox" name="all" onclick="checkAll()" />全/不選<br />
		<input type="button" value="總金額:" onclick="getSum()" />
		<span id="sumid"></span>
	</body>

</html>

5.通過節點關系找標簽

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title></title>
	</head>

	<body>
		<input type="text" id="userName" /><span></span>

	</body>

	<script type="text/javascript">
		/*
			通過關系(父子關系、兄弟關系)找標簽。
				parentNode	獲取當前元素的父節點。
				childNodes	獲取當前元素的所有下一級子元素。
				firstChild	獲取當前節點的第一個子節點。
				lastChild  	獲取當前節點的最后一個子節點。
		------------------------------------------------------------	
				nextSibling		獲取當前節點的下一個節點。(獲取當前節點相鄰的下一個平級節點)
				previousSibling	獲取當前節點的上一個節點。(獲取當前節點相鄰的上一個平級節點)
				
		我們可以通過標簽的類型進行判斷篩選:
			
			文本節點的類型: 3
			注釋的節點類型: 8
			標簽節點的類型: 1
		*/

		var bodyNode = document.getElementsByTagName("body")[0];
		//查看父節點
		var parentNode = bodyNode.parentNode;
		document.write("父節點的名稱:" + parentNode.nodeName);
		document.write("<br />");

		//找子節點:childNodes 獲取所有的子節點,返回的是一個數 組。 注意: 獲取子節點的時 候是包括了空文本或者是注釋。
		var children = bodyNode.childNodes;
		//document.write(children.length);
		for (var i = 0; i < children.length; i++) {
			//if(children[i].nodeType==1){
			document.write("節點的名字:" + children[i].nodeName + " 對象的類型:" + children[i].nodeType + "---");
			//}
		}
		document.write("<br />");
		document.write("第一個子節點:" + bodyNode.firstChild.nodeName);
		document.write("最后一個子節點:" + bodyNode.lastChild.nodeName);
		document.write("<br />");

		//找兄弟節點
		var inputNode = document.getElementById("userName");
		document.write("下個兄弟節點:" + inputNode.nextSibling.nodeName);
		document.write("上一個兄弟節點:" + inputNode.previousSibling.nodeName);
	</script>
</html>

6.創建節點,插入節點

每個節點都包含的信息的,這些屬性是:
nodeType 節點類型
nodeName 節點名稱
nodeValue節點值

	元素類型 節點類型 
	
	  元素		1		就是標簽元素,例<div>..</div>
	  文本		3		標簽元素中的文本
	  注釋		8       表示為注釋

nodeName
	nodeName 屬性含有某個節點的名稱。
	--------------------------------
	元素節點的 nodeName 是標簽名稱 
	屬性節點的 nodeName 是屬性名稱 
	文本節點的 nodeName 永遠是 #text 
	文檔節點的 nodeName 永遠是 #document 

nodeValue
	對於文本節點,nodeValue 屬性是所包含的文本。
	對於屬性節點,nodeValue 屬性是屬性值。
	對於注釋節點,nodeValue 屬性注釋內容。
	nodeValue 屬性對於文檔節點和元素節點是不可用的。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title></title>
		<script type="text/javascript">
			/*
			 創建節點、設置節點的屬性。
			 
				document.createElement("標簽名")		創建新元素節點
				elt.setAttribute("屬性名", "屬性值")	設置屬性
				elt.appendChild(e)		添加元素到elt中最后的位置
			*/

			var num = 1;

			function add() {
				var inputNode = document.createElement("input"); //創建一個指定標簽名字的節點。

				//setAttribute:設置節點的屬性
				inputNode.setAttribute("type", "button");
				inputNode.setAttribute("value", "按鈕" + num);
				num++;

				var bodyNode = document.getElementsByTagName("body")[0];
				bodyNode.appendChild(inputNode); //appendChild 添加子節點。
			}
		</script>
	</head>

	<body>
		<input type="button" onclick="add()" value="添加" />
	</body>

</html>

7.練習:添加標簽

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title></title>

		<script type="text/javascript">
			/*
				插入目標元素的位置	 
				elt.insertBefore(newNode, childNode);			添加到elt中,childNode之前。
				注意: elt必須是childNode的直接父節點。
					
				刪除指定的子節點	
				elt.removeChild(child)							
				注意: elt必須是child的直接父節點。
				
			*/
			
			//添加附件
			function addFile() {
				//獲取表格節點對象
				var table = document.getElementsByTagName("table")[0];
				//創建tr標簽節點對象
				var trnode = document.createElement("tr");
				trnode.innerHTML = "<td><input type='file'/></td><td><a href='#' onclick='del(this)'>刪除附件</a></td>";
				/*	var	tdnode1=document.createElement("td");
					var	tdnode2=document.createElement("td");
					tdnode1.innerHTML="<input type='file'/>";
					tdnode2.innerHTML="<a href='#'>刪除附件</a>";	
					trnode.appendChild(tdnode1);
					trnode.appendChild(tdnode2);*/
				//table.appendChild(trnode);
				
				//獲取父節點對象
				var tbody = document.getElementsByTagName("tbody")[0];
				//獲取要插入的子節點
				var lastrow = document.getElementById("lastrow");
				//添加數據
				tbody.insertBefore(trnode, lastrow);
			}

			//刪除附件
			function del(delfile) {
				//獲取父節點對象
				var tbody = document.getElementsByTagName("tbody")[0];
				//獲取要刪除的tr標簽節點對象
				var del = delfile.parentNode.parentNode;
				//刪除數據
				tbody.removeChild(del);
			}
		</script>
	</head>

	<body>
		<table>
			<tbody>
				<tr>
					<td><input type="file" /></td>
					<td><a href="#" onclick="del(this)">刪除附件</a></td>
				</tr>

				<tr id="lastrow">
					<td colspan="2"><input onclick="addFile()" type="button" value="添加附件" /></td>
				</tr>
			</tbody>
		</table>
	</body>

</html>

8.練習:城市聯動框

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title></title>
		<script type="text/javascript">
			function showCity() {
				//維護一個二維數組存儲省份對應的城市
				var citys = [[],["洛陽", "鄭州", "三門峽"],["青島", "日照", "煙台"],["廣州", "汕頭"]];
				//獲取省份對應的節點
				var provinceNodes = document.getElementById("province");
				//獲取省份選中的選項
				var index = provinceNodes.selectedIndex;
				//獲取對應的城市
				var datas = citys[index];
				//找到city節點
				var citynode = document.getElementById("city");
				//先清空city框所有option
				var citychild = citynode.childNodes;
				for (var i = 0; i < citychild.length;) {
					citynode.removeChild(citychild[i]);
				}
				//設置options的個數。
				//citynode.options.length = 1;
				//遍歷對應的所有城市然后創建對應的option添加到city上。
				for (var i = 0; i < datas.length; i++) {
					var op = document.createElement("option");
					op.innerHTML = datas[i];
					citynode.appendChild(op);
				}
			}
		</script>
	</head>

	<body>
		省份<select id="province" onchange="showCity()">
    		<option>省份</option>
    		<option>河南</option>
            <option>山東</option>
            <option>廣東</option>
    	</select> 城市
		<select id="city">
		<option>城市</option>
	</select>
	</body>

</html>

9.正則驗證From表單

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">

	//檢查用戶名
	function checkName(){
		var inputNode = document.getElementById("userName");
		var spanNode = document.getElementById("userId");
		//獲取輸入框的內容
		var content  = inputNode.value;
		//用戶名的規則: 六位的英文與數字組成。數字不能開頭
		var reg = /^[a-z][a-z0-9]{5}$/i;	
		if(reg.test(content)){
			//符合規則
			spanNode.innerHTML = "正確".fontcolor("green");
			
			return true;
		}else{
			//不符合規則
			spanNode.innerHTML = "錯誤".fontcolor("red");
			
			return false;
		}	
	}


	//檢查郵箱
	function checkEmail(){
		var email = document.getElementById("email").value;
		var spanNode = document.getElementById("emailspan");
		
		//編寫郵箱的正則       13456@qq.com  13456@qq.net  13456@qq.com.cn
		var reg = /^[a-z0-9]\w+@[a-z0-9]+(\.[a-z]{2,3}){1,2}$/i; 
		if(reg.test(email)){
			//符合規則
			spanNode.innerHTML = "正確".fontcolor("green");
			return true;
		}else{
			//不符合規則
			spanNode.innerHTML = "錯誤".fontcolor("red");
			
			return false;
		}	
	}
	
	function checkAll(){
		var userName = checkName();	
		var email = checkEmail();
		if(userName&&email){
			return true;
		}else{
		
			return false;
		}
	}
	
/*
 表單提交的時候是會觸發onsubmit事件的,如果onsubmit事件的方法返回是true,那么該表單允許提交,如果返回的是false,該表單不允許提交。

*/
</script>

<meta http-equiv="Content-Type" content="text/html; 
charset=utf-8" />
<title>正則表達式</title>
</head>
<body>								
<form action="success.html" method="get" onsubmit="return checkAll()" > <!--如果表單提交時候觸發的方法返回是false,那么該表單
不允許提交,如果返回的是true允許提交 -->
			<table border="1px" width="50%" align="center" 
cellspacing="0px" cellpadding="3px">
				<tr>
					<td width="25%">姓名:</td>
					<td>
						<input type="text" name="userName" id="userName" onblur="checkName()"/>
                        <span id="userId"></span>
					</td>
				</tr>
				<tr>
					<td >密碼:</td><td>
						<input type="password"  name="pwd" id="pwd" onblur="checkPass()"/>
                        <span id="passId"></span>
					</td>
				</tr>
				<tr>
					<td>確認密碼:</td><td>
				<input type="password" name="ensurepwd" id="ensurepwd" onblur="ensurepass()" />		                <span id="ensure"></span>
					</td>
				</tr>
				<tr>
					<td>郵箱</td><td>
						<input type="text" name="email" id="email" 
onblur="checkEmail()"/>
                		<span id="emailspan"></span>
				        
					</td>
				</tr>
				<tr>
					<td>性別</td><td>
						<input type="radio" checked="ture" name="gender" id="male" value="male"/>
					男
						<input type="radio" name="gender" value="female"/>
					女</td>
				</tr>
				<tr>
					<td>愛好:</td><td>
						<input type="checkbox"  name="like" />
					eat
						<input type="checkbox" name="like" />
					sleep
						<input type="checkbox" name="like"/>
					play  
                    <span id="hobbySpan"></span>
                    </td>
				</tr>
				<tr>
					<td>城市</td><td>
					<select name="city" id="city">
						<option value=""> 請選擇</option>
						<option value="bj"> 北京 </option>
						<option value="gz"> 廣州 </option>
						<option value="sh"> 上海 </option>
					</select>
                    
                    </td>
				</tr>
				<tr>
					<td>自我介紹</td><td>					<textarea cols="15" rows="5"  name="myInfo" id="myInfo"></textarea></td>
				</tr>
				<tr align="center">
					<td colspan="2"><!--提交按鈕-->
					<input type="submit"/>
					</td>
				</tr>
			</table>
		</form>
</body>

</html>

Success.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
	<h1><font color="#FF0000">恭喜你 ,提交數據成功</font></h1>
</body>
</html>

正則表達式:

位置:
^ 開頭
$ 結尾
次數:
* 0或多個
+ 1或多個
? 0或1個
{n} 就是n個
{n,} 至少n個
{n,m} 最少n個,最多m個
通配符:
\d 任意數字
\D 任意非數字
\s 任意空白
\S 任意非空白
. 任意字符(除'\n'外)
組合:
[a-z]
[0-9]

	(正則)		匹配括號中正則表達式對應的結果,並暫存這個結果。
	(?:正則)	匹配括號中正則表達式對應的結果,但不暫存這個結果。
	\數字		使用第n個組匹配的結果

使用正則的工具(RegExp類與相關方法)
創建:
// 方式一
var regex = new RegExp("正則表達式", "標志");
// 方式二
var regex = /正則表達式/標志

標志:
g (全文查找出現的所有 pattern)
i (忽略大小寫)
m (多行查找)
方法:
Regexp.test( str )
String.replace( regex, str )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM