JavaScript之DOM
通過 HTML DOM ,可以訪問JavaScript HTML 文件的所有元素
一、 document 物件概述
· 每個載入瀏覽器的 HTML 文件都會成為 document 物件; · 通過使用document 物件,可以從指令碼中對 HTML 頁面中的所有元素進行訪問; · document 物件是window 物件的一部分,可通過window.document 屬性對其進行訪問。
二、HTML DOM
· 當網頁被載入時,瀏覽器會建立頁面的文件物件模型(Document Object Model); · HTML DOM 模型被構造為物件的樹。
1. DOM 樹
HTML 文件中的所有節點組成了一個文件樹(或節點樹)。
2. DOM 樹操作
通過可程式設計的物件模型,JavaScript 獲得了足夠的能力來建立動態的 HTML · 查詢節點 · 讀取節點資訊 · 修改節點 · 建立新節點 · 刪除節點
(1).節點資訊
· nodeName(節點名稱): 元素節點和屬性節點的nodeName 為 標籤或屬性名稱;文字節點的nodeName 永遠是 #text;文件節點的nodeName 永遠是 #document. · nodeType(節點型別): 返回數值。元素節點返回1;屬性節點返回2;文字節點返回3;註釋節點返回8;文件節點返回9。
<img src="../images/234/jpg" id="xylm" > //在js中新增輸出 img 節點資訊 var a = document.getElementById("xylm"); alert(a.nodeName); //IMG alert(a.nodeType); //1 alert(a.nodeValue); //null
(2).元素節點的內容
· innerText:設定或獲取位於物件起始和結束標籤內的文字 · innerHTML:設定或獲取位於物件起始和結束標籤內的 HTML 使用 innerHTML ,標籤內怎麼寫,就怎麼取,包括標籤和換行
<div id="test">
<span style="color:blue">test1</span><span>test2</span>
<span>test3</span>
</div>
<script type="text/javascript">
var a = document.getElementById("test");
alert(a.innerText);
alert(a.innerHTML);
</script>
(3).節點屬性
· getAttribute():根據屬性名稱獲取屬性的值 · setAttribute():根據屬性名稱設定屬性的值
<div>
<a href="Default.aspx" title="this is a link" id="a1">
Click Me
</a>
</div>
<script type="text/javascript">
var a = document.getElementById("a1");
var hf = a.getAttribute("href");
alert(hf); //Default.aspx
alert(a.innerHTML); //Click Me
</script>
(4).元素節點的樣式
· style 屬性:node.style.color 、node.style.fontSize · className 屬性:x.className = “樣式類名稱”;
<p id="p1">DOM </p>
<script>
var p = document.getElementById("p1");
p.style.color = "red";
p.style.fontSize = 20;
//或者 p.className = "樣式類名稱";
</script>
(5).建立新節點
· document.createElement(elementName):elementName 要建立的元素標籤名稱,返回新建立的節點 · 設定節點資訊
//建立新節點
var newNode = document.createElement("input");
//設定節點的資訊
newNode.type="text";
newNode.value="mary";
newNode.style.color="red";
(6).新增新節點
· parentNode.appendChild(newNode):追加新節點作為父節點的最後一個子節點存在 · parentNode.insertBefore(newNode,refNode):refNode是參考節點,新節點位於此節點之前
//新增新節點
//建立一個新的文字框
//文字框加入到 form 中,作為 form 的最後一個子節點
//建立一個新的 h1節點,加入到原有按鈕之前
<body>
<form id="form1">
<input id="btn1" type="button" value="新增新節點" onclick=“createNewNode();” />
</form>
</body>
<script>
function createNewNode(){
var form = document.getElementById("form1");
//建立一個新的文字框節點
var textNode = document.createElement("input");
textNode.type = "text";
textNode.value = "mary";
//加入到 form 中,作為 form 的最後一個子節點
form.appendChild(textNode);
//建立一個新的 h1 節點,加入到原有按鈕之前
var h1Node = document.createElement("h1");
h1Node.innerHTML = "h1 text";
form.insertBefore(h1Node,document.getElementById("btn1");
}
</script>
(7).刪除節點
· node.removeChild(childNode):刪除某個子節點,childNode 必須是 node 的子節點 · childNode.parentNode.removeChild(childNode):由父節點刪除其下屬的某個子節點
//刪除節點
<style>
div {
border:1px solid black;
width:100px;
height:70px;
}
<style>
<form>
<input id = "btn1" type = "button" value = "刪除節點" onclick = "deleteNode();"/>
<div id="div1">
<a href="a">link1</a>
<p>段落</p>
</div>
</form>
<script>
function deleteNode(){
var delNode = document.getElementById("div1");
delNode.parentNode.removeChild(delNode);
}
<script>
3. 查詢 HTML 元素
為了通過JavaScript 操作 HTML 元素,必須首先找到該元素 · 通過 id 找到 HTML 元素 · 通過標籤名找到 HTML 元素 · 通過類名找打 HTML 元素(系統沒有提供方法,需要自己進行編寫。思路:先找到所有的標籤 ,將其裝入一個數組內,然後根據方法傳入的引數,尋找對應要找到的class 類 ,最後將找到的對應類的元素裝入另一個數組內) · 通過層次(節點關係)找到 HTML 元素 · 通過 name 屬性找到 HTML 元素
(1).通過 id 查詢 HTML 元素
在 DOM 中查詢的 HTML 元素的最簡單方法,就是通過使用元素的 id。
//查詢 id="name" 的元素
var name = document.getElementById("name");
(2).通過標籤名查詢 HTML 元素
根據標籤名查詢的結果為使用該標籤的所有元素,即為一個數組,可使用 length 屬性獲取個數
//查詢 id = "user" 的元素,然後查詢“user” 中的所有<input>元素
var user = document.getElementById("user");
var p = user.getElementByTagName("p");
(3).根據層次查詢 HTML 元素
parentNode、firstChild 和 lastChild,遵循文件的上下層次結構,查詢單個節點 childNodes ,遵循文件的上下層次結構,查詢多個節點 previousSibling,前一個同級節點 nextSibling,後一個同級節點
//根據層次查詢節點
<p>段落文字</p>
<select id="select1">
<option value="1">a</option>
<option value="2">b</option>
<option value="3">c</option>
</select><a href="me.html">click me</a>
<script>
var s1 = document.getElementById("select1");
//子節點
alert(s1.childNodes.length); //7
var o1 = s1.firstChild;
alert(o1.innerHTML);// undefined
//同級節點
alert(s1.nextSibling.innerHTML);// click me
alert(s1.previousSibling.innerHTML); //undefined
</script>
在 HTML 文件中,空白部分也是節點。 所以上述程式碼中的 s1節點長度為7,s1 的首個子節點為空。
//若將 html 程式碼修改為如下格式,即刪除上述程式碼中的空白部分
<p>段落文字</p>
<select id="select1"><option value="1">a</option><option value="2">b</option><option value="3">c</option></select><a href="me.html">click me</a>
<script>
var s1 = document.getElementById("select1");
//子節點
alert(s1.childNodes.length); //3
var o1 = s1.firstChild;
alert(o1.innerHTML);// a
//同級節點
alert(s1.nextSibling.innerHTML);// click me
alert(s1.previousSibling.innerHTML); //段落文字
</script>
(4).根據 name 屬性查詢節點
<input type="radio" name="sex" value="0"/>male
<input type="radio" name="sex" value="1"/>female
<br><br>
<input type="radio" name="state" value="0"/>開通
<input type="radio" name="state" value="1"/>暫停
<input type="radio" name="state" value="2"/>刪除
<script>
var nodes = document.getElementsByName("sex");
alert(nodes.length); //2
nodes = document.getElementsByName("state");
alert(nodes.length); //3
</script>
4.常用 HTML DOM 物件
HTML 標籤物件化,就是將網頁中的每個元素都看作一個物件
<form id="form1">
<input type="button" value="建立新節點" onclick="createNewNode();"/>
</form>
<script>
funcation createNewNode(){
var form = document.getElementById("form1");
//建立一個新的圖片物件,加入到 form 中
var newNode = new Image();
newNode.src = "a.jpg";
form.appendChild(newNode);
}
</scrpti>
(1).標準 DOM 與 HTML DOM
· 標準 DOM 提供了統一的操作介面 - createElement - appendChild - setAttribute - removeAttribute - nodeName - … · HTML DOM 提供了封裝好的各種物件 - Image - Select - Option - …
//標準 DOM 的實現方式
var newNode = document.createElement("img");
// HTML DOM 的實現方式
var newNode = new Image();
(2).標準 DOM 與 HTML DOM 操作
· 操作節點,如建立、刪除、查詢等,使用標準 DOM 操作 · 操作屬性,如讀取或者修改屬性的值,使用 HTML DOM 操作
(3).Select 物件與Option 物件
· Select 物件代表 HTML 表單中的一個下拉列表 - 標籤即表示一個 Select 物件 - 常用屬性:options、selectedIndex、size - 常用方法:add(option)、remove(index) - 事件:onchange
<select id="sel1" onchange="showInfo();">
<option value="11">aa</option>
<option value="22">bb</option>
</select>
· Option 物件代表 HTML 表單中下拉列表中的一個選項 - 標籤表示一個 Option 物件 - 建立物件:var o = new Option(text,value); - 常用屬性:index、text、value、selected
function showInfo() {
var selObj = document.getElementById("sel1");
var i = selObj.selectedIndex;
alert(selObj.options[i].value);
}
function selFunc(){
var selObj = document.getElementById("s1");
var value = selObj.options[selObj.selectedIndex].value;
alert(value);
var option = new Option("cc","33");
selObj.add(option);
}
<select id="s1" onchange="selFunc();">
<option value="1">aa</option>
<option value="2">bb</option>
</select>
(4).Table 物件
· Table 物件代表一個 HTML 表格 -
標籤表示一個 Table 物件 - 常用屬性:rows、cells - 常用方法:insertRow(index):返回 TableRow 物件,TableRow 物件代表一個 HTML 表格行; deleteRow(index)<table id = "t1" border="1" width="100">
<tr>
<td rowspan="2">a</td>
<td>b</td>
</tr>
<tr>
<td>c</td>
</tr>
</table>
<script>
var table = document.getElementById("t1");
alert(table.rows.length); //2
alert(table.cells.length); //3
</script>
(5).TableRow 物件
· TableRow 物件代表一個 HTML 表格行 - 標籤表示一個 TableRow 物件 - 常用屬性:cells、innerHTML、rowIndex - 常用方法:insertCell(index):返回 TableCell 物件 deleteCell(index)
var table = document.getElementById("t1");
alert(table.rows[0].cells.length); //2
alert(table.rows[1].cells.rowIndex); //1
(6).TableCell 物件
· TableCell 物件代表一個 HTML 表格單元格 - 標籤表示一個 TableCell 物件 - 常用屬性:cellIndex、innerHTML、colSpan、rowSpan
var table = document.getElementById("t1");
alert(table.rows[0].cells[0].rowSpan); //2
alert(table.rows[1].cells[1].innerHTML); //c
(7).Screen 物件
· Screen 物件包含有關客戶端顯示螢幕的資訊 - 常用於獲取螢幕的解析度和色彩 - 常用屬性:width/height,availWidth/availHeight
(8).History 物件
· History 物件包含使用者(在瀏覽器視窗中)訪問過的 URL - length 屬性:瀏覽器歷史類列表中的 URL 數量 - 方法:back(),forward(),go(num)
alert(history.length);
history.forward(); //等同於單擊“前進”按鈕
history.back(); //等同於單擊"後退"按鈕
history.go(-2); //等同於單擊兩次"後退"按鈕
(9).Location 物件
· Location 物件包含有關當前 URL 的資訊,常用於獲取當前網址和改變當前網址 · href 屬性:當前視窗正在瀏覽的網頁地址 · 方法:replace(url):轉到url 網頁地址 reload():重新載入當前網址,效果同按下重新整理按鈕
location.href = "http://www.baidu.com";
//或者
location.replace("http://www.baidu.com");
(10).navigator 物件
· navigator 物件包含有關瀏覽器的資訊,常用於獲取客戶瀏覽器和作業系統資訊。
//遍歷 navigator 物件的所有屬性
var showText = "Navigator 物件屬性列表:\n";
for (var propname in navigator){
showText += propname +":"+navigator[propname]+"\n";
}
alert(showText);