經過 DOM,您可訪問 HTML 文檔中的每一個節點。javascript
你可經過若干種方法來查找您但願操做的元素:html
getElementById() 和 getElementsByTagName() 這兩種方法,可查找整個 HTML 文檔中的任何 HTML 元素。java
這兩種方法會忽略文檔的結構。假如您但願查找文檔中全部的 <p> 元素,getElementsByTagName() 會把它們所有找到,無論 <p> 元素處於文檔中的哪一個層次。同時,getElementById() 方法也會返回正確的元素,不論它被隱藏在文檔結構中的什麼位置。node
這兩種方法會像您提供任何你所須要的 HTML 元素,不論它們在文檔中所處的位置!測試
getElementById() 可經過指定的 ID 來返回元素:this
document.getElementById("ID");
註釋:getElementById() 沒法工做在 XML 中。在 XML 文檔中,您必須經過擁有類型 id 的屬性來進行搜索,而此類型必須在 XML DTD 中進行聲明。spa
getElementsByTagName() 方法會使用指定的標籤名返回全部的元素(做爲一個節點列表),這些元素是您在使用此方法時所處的元素的後代。指針
getElementsByTagName() 可被用於任何的 HTML 元素:code
document.getElementsByTagName("標籤名稱");
或者:htm
document.getElementById('ID').getElementsByTagName("標籤名稱");
下面這個例子會返回文檔中全部 <p> 元素的一個節點列表:
document.getElementsByTagName("p");
下面這個例子會返回全部 <p> 元素的一個節點列表,且這些 <p> 元素必須是 id 爲 "maindiv" 的元素的後代:
document.getElementById('maindiv').getElementsByTagName("p");
當咱們使用節點列表時,一般要把此列表保存在一個變量中,就像這樣:
var x=document.getElementsByTagName("p");
如今,變量 x 包含着頁面中全部 <p> 元素的一個列表,而且咱們能夠經過它們的索引號來訪問這些 <p> 元素。
註釋:索引號從 0 開始。
您能夠經過使用 length 屬性來循環遍歷節點列表:
var x=document.getElementsByTagName("p"); for (var i=0;i<x.length;i++) { // do something with each paragraph }
您也能夠經過索引號來訪問某個具體的元素。
要訪問第三個 <p> 元素,您能夠這麼寫:
var y=x[2];
這三個屬性 parentNode、firstChild 以及 lastChild 可遵循文檔的結構,在文檔中進行「短距離的旅行」。
請看下面這個 HTML 片斷:
<table> <tr> <td>John</td> <td>Doe</td> <td>Alaska</td> </tr> </table>
在上面的HTML代碼中,第一個 <td> 是 <tr> 元素的首個子元素(firstChild),而最後一個 <td> 是 <tr>元素的最後一個子元素(lastChild)。
此外,<tr> 是每一個 <td>元 素的父節點(parentNode)。
對 firstChild 最廣泛的用法是訪問某個元素的文本:
var x=[a paragraph]; var text=x.firstChild.nodeValue;
parentNode 屬性常被用來改變文檔的結構。假設您但願從文檔中刪除帶有 id 爲 "maindiv" 的節點:
var x=document.getElementById("maindiv"); x.parentNode.removeChild(x);
首先,您須要找到帶有指定 id 的節點,而後移至其父節點並執行 removeChild() 方法。
有兩種特殊的文檔屬性可用來訪問根節點:
第一個屬性可返回存在於 XML 以及 HTML 文檔中的文檔根節點。
第二個屬性是對 HTML 頁面的特殊擴展,提供了對 <body> 標籤的直接訪問。
nodeName、nodeValue 以及 nodeType 包含有關於節點的信息。
每一個節點都擁有包含着關於節點某些信息的屬性。這些屬性是:
nodeName 屬性含有某個節點的名稱。
註釋:nodeName 所包含的 XML 元素的標籤名稱永遠是大寫的
對於文本節點,nodeValue 屬性包含文本。
對於屬性節點,nodeValue 屬性包含屬性值。
nodeValue 屬性對於文檔節點和元素節點是不可用的。
nodeType 屬性可返回節點的類型。
最重要的節點類型是:
下面這個例子向咱們展現了當一個用戶在文檔中點擊時,HTML 文檔的背景顏色如何被改變。
<html> <head> <script type="text/javascript"> function ChangeColor() { document.body.bgColor="yellow" } </script> </head> <body onclick="ChangeColor()"> Click on this document! </body> </html>
測試點擊了鼠標的哪一個鍵 鼠標光標的座標
<html> <head> <script type="text/javascript"> function whichButton(event) { if (event.button==2) { alert("您點擊了鼠標右鍵!") } else { alert("您點擊了鼠標左鍵!") } } </script> </head> <body onmousedown="whichButton(event)"> <p>請在文檔中點擊。一個消息框會提示出你點擊了哪一個鼠標按鍵。</p> </body> </html>
<html> <head> <script type="text/javascript"> function show_coords(event) { x=event.clientX <--event.screenX event.screenY 取相對於全屏的座標XY--> y=event.clientY alert("X 座標: " + x + ", Y 座標: " + y) } </script> </head> <body onmousedown="show_coords(event)"> <p>請在文檔中點擊。一個消息框會提示出鼠標指針的 x 和 y 座標。</p> </body> </html>
相對於屏幕 取座標點
<html> <head> <script type="text/javascript"> function coordinates(event) { x=event.screenX y=event.screenY alert("X=" + x + " Y=" + y) } </script> </head> <body onmousedown="coordinates(event)"> <p> 在文檔中點擊某個位置。消息框會提示出指針相對於屏幕的 x 和 y 座標。 </p> </body> </html>
<html> <head> <script type="text/javascript"> function isKeyPressed(event) { if (event.shiftKey==1) { alert("The shift key was pressed!") } else { alert("The shift key was NOT pressed!") } } </script> </head> <body onmousedown="isKeyPressed(event)"> <p>在文檔中點擊某個位置。消息框會告訴你是否按下了 shift 鍵。</p> </body> </html>
<html> <head> <script type="text/javascript"> function whichElement(e) { var targ if (!e) var e = window.event if (e.target) targ = e.target else if (e.srcElement) targ = e.srcElement if (targ.nodeType == 3) // defeat Safari bug targ = targ.parentNode var tname tname=targ.tagName alert("You clicked on a " + tname + " element.") } </script> </head> <body onmousedown="whichElement(event)"> <p>在文檔中點擊某個位置。消息框會提示出您所點擊的標籤的名稱。</p> <h3>這是標題</h3> <p>這是段落。</p> <img src="../i/eg_mouse2.jpg" tppabs="http://www.w3school.com.cn/i/eg_mouse2.jpg" /> </body> </html>
<html> <head> <script type="text/javascript"> function getEventType(event) { alert(event.type); } </script> </head> <body onmousedown="getEventType(event)"> <p>在文檔中點擊某個位置。消息框會提示出被觸發的事件的類型。</p> </body> </html>