HTML DOM 之 DOM物件:Document Object Model (文件物件模型)
思維導圖
HTML DOM 簡介
HTML 文件物件模型(HTML Document Object Model)定義了訪問和處理 HTML 文件的標準方法。
在繼續學習之前,您需要對下面的知識有基本的瞭解:
HTML / XHTML
JavaScript
什麼是 DOM?
通過 JavaScript,您可以重構整個 HTML 文件。您可以新增、移除、改變或重排頁面上的專案。
要改變頁面的某個東西,JavaScript 就需要獲得對 HTML 文件中所有元素進行訪問的入口。
這個入口,連同對 HTML 元素進行新增、移動、改變或移除的方法和屬性,都是通過文件物件模型來獲得的(DOM)。
在 1998 年,W3C 釋出了第一級的 DOM 規範。這個規範允許訪問和操作 HTML 頁面中的每一個單獨的元素。
所有的瀏覽器都執行了這個標準,因此,DOM 的相容性問題也幾乎難覓蹤影了。
DOM 可被 JavaScript 用來讀取、改變 HTML、XHTML 以及 XML 文件。
DOM 被分為不同的部分(核心、XML及HTML)和級別(DOM Level 1/2/3):
Core DOM
定義了一套標準的針對任何結構化文件的物件
XML DOM
定義了一套標準的針對 XML 文件的物件
HTML DOM
定義了一套標準的針對 HTML 文件的物件。
DHTML:是很多技術的簡稱
** html: 封裝資料
** css:使用屬性和屬性值設定樣式
** dom:操作html文件(標記型文件)
** javascript:專門指的是js的語法語句(ECMAScript)
HTML DOM 節點
HTML文件中的每個成分都是一個節點。
節點(Node)
根據DOM,HTML文件中的每個成分都是一個節點。
DOM 是這樣規定的:
1、整個文件是一個文件節點 (Document)
2、每個 HTML 標籤是一個元素節點 (Element)
3、包含在 HTML 元素中的文字是文字節點
4、每一個 HTML 屬性是一個屬性節點
5、註釋屬於註釋節點
Node 層次
節點彼此都有等級關係。
HTML 文件中的所有節點組成了一個文件樹(或節點樹)。HTML 文件中的每個元素、屬性、文字等都代表著樹中的一個節點。
樹起始於文件節點,並由此繼續伸出枝條,直到處於這棵樹最低級別的所有文字節點為止。
下面這個圖片表示一個文件樹(節點樹):
HTML DOM 訪問節點
通過 DOM,您可訪問 HTML 文件中的每個節點。
查詢並訪問節點
你可通過若干種方法來查詢您希望操作的元素:
通過使用 getElementById() 和 getElementsByTagName() 方法
通過使用一個元素節點的 parentNode、firstChild 以及 lastChild 屬性
* getElementById() 和 getElementsByTagName() 這兩種方法,可查詢整個 HTML 文件中的任何 HTML 元素。
這兩種方法會忽略文件的結構。假如您希望查詢文件中所有的 <p> 元素,
getElementsByTagName() 會把它們全部找到,不管 <p> 元素處於文件中的哪個層次。
同時,getElementById() 方法也會返回正確的元素,不論它被隱藏在文件結構中的什麼位置。
節點列表(nodeList)
parentNode、firstChild以及lastChild
這三個屬性 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() 方法。
根節點
有兩種特殊的文件屬性可用來訪問根節點:
document.documentElement
document.body
第一個屬性可返回存在於 XML 以及 HTML 文件中的文件根節點。
第二個屬性是對 HTML 頁面的特殊擴充套件,提供了對 <body> 標籤的直接訪問。
HTML DOM 節點資訊
nodeName、nodeValue 以及 nodeType 包含有關於節點的資訊。
節點資訊
每個節點都擁有包含著關於節點某些資訊的屬性。這些屬性是:
nodeType(節點型別)
nodeName(節點名稱)
nodeValue(節點值)
========================
nodeType 屬性可返回節點的型別。
元素型別 節點型別
元素 1
屬性 2
文字 3
nodeName 屬性含有某個節點的名稱。
元素節點的 nodeName 是標籤名稱,如 input, div, img ...
屬性節點的 nodeName 是屬性名稱, 如 id, name, src ...
文字節點的 nodeName 永遠是 #text
文件節點的 nodeName 永遠是 #document
註釋:nodeName 所包含的 XML 元素的標籤名稱永遠是大寫的
nodeValue
nodeValue 屬性對於 元素節點 和 文件節點 是不可用的。
對於屬性節點,nodeValue 屬性包含屬性值。
對於文字節點,nodeValue 屬性包含文字。
實際應用
1、Document物件
Document建立標籤.
createElement(); -----建立一個元素標籤
createTextNode(); -----建立一個文字節點
node物件.appendChild(node);
案例:
<BODY> <ul id="city"> <li>北京</li> <li>上海</li> <li>廣州</li> </ul> </BODY> <SCRIPT LANGUAGE="JavaScript"> // 需求:建立一個<li>深圳</li> 將其放在ul中 // 1.建立li標籤 <li></li> var liElement = document.createElement("li"); // 2.建立一個文字節點 深圳 var textElement = document.createTextNode("深圳"); // 3.將文字內容新增到li中 <li>深圳</li> liElement.appendChild(textElement); // 4.將li新增到ul中.(查詢ul.) var city = document.getElementById("city"); city.appendChild(liElement); </SCRIPT>
write()方法:
向頁面輸出變數(值)
向頁面輸出html程式碼
2、Element物件(瞭解)
** 如何獲取標籤的子標籤(唯一有效辦法)(*********)
- 使用getElementsByTagName方法
元素物件:元素(標籤)
元素物件操作屬性
getAttribute(“屬性的名”); // 獲得屬性的值
setAttribute(“屬性名”,”屬性值”); // 新增和修改,(value值設定不了)
removeAttribute(“屬性名”); // 移除屬性
案例:操作元素的屬性
// 操作屬性 (對屬性進行增加 修改 刪除)
3、Node物件(瞭解)
節點物件的屬性:父節點 子節點及同輩節點
parentNode
節點的插入
appendChild(); 剪下貼上的效果
insertBefore(newNode,oldNode);
刪除和替換節點.
removeChild() //必須是 父節點.removeChild(子節點)
replaceChild(newNode,oldNode)
複製節點
cloneNode(boolean); boolean: true 克隆的時候 帶著子節點一起克隆; false 只克隆當前節點,預設false