accp6.0 《使用javascript增強交互效果》學習筆記ch4 DOM高級編程

目標
1.使用getElement系列方法實現dom元素的查找和定位
2.使用Core Dom標準操作實現節點的增刪改查
3.使用HTML DOM 特有操作實現HTML元素內容的修改
 
關鍵詞 core 核心 attribute 屬性  append 追加 node 節點 remove 刪除 replace 替換
 
DOM 文檔對象模型

HTML DOM 定義了訪問和操作HTML文檔的標準方法。

 
DOM規定下的HTML文檔
整個文檔是一個文檔節點
每個HTML標籤都是一個元素節點
包含在HTML元素中的文本是文本節點
每個HTML屬性都是一個屬性節點
註釋屬於註釋節點

HTML DOM 把 HTML 文檔呈現爲帶有元素、屬性和文本的樹結構(節點樹)。

 

DOM 被分爲不同的部分(核心、XML及HTML)和級別(DOM Level 1/2/3):

Core DOM
定義了一套標準的針對任何結構化文檔的對象
XML DOM
定義了一套標準的針對 XML 文檔的對象
HTML DOM
定義了一套標準的針對 HTML 文檔的對象。
 
Core Dom的標準節點操作
1.查看節點
    1 .使用getElement系列方法訪問指定的節點
        getElementById()
        getElementsByName();
        getElementsByTagName();
 

getElementById() 和 getElementsByTagName()

getElementById() 和 getElementsByTagName() 這兩種方法,可查找整個 HTML 文檔中的任何 HTML 元素。

這兩種方法會忽略文檔的結構。假如您希望查找文檔中所有的 <p> 元素,getElementsByTagName() 會把它們全部找到,不管 <p> 元素處於文檔中的哪個層次。同時,getElementById() 方法也會返回正確的元素,不論它被隱藏在文檔結構中的什麼位置。

這兩種方法會向您提供任何你所需要的 HTML 元素,不論它們在文檔中所處的位置!

getElementById() 可通過指定的 ID 來返回元素:

getElementById() 語法

document.getElementById("ID"); 

註釋:getElementById() 無法工作在 XML 中。在 XML 文檔中,您必須通過擁有類型 id 的屬性來進行搜索,而此類型必須在 XML DTD 中進行聲明。

getElementsByTagName() 方法會使用指定的標籤名返回所有的元素(作爲一個節點列表),這些元素是您在使用此方法時所處的元素的後代。

getElementsByTagName() 可被用於任何的 HTML 元素:

getElementsByTagName() 語法

document.getElementsByTagName("標籤名稱"); 

或者:

document.getElementById('ID').getElementsByTagName("標籤名稱"); 

實例 1

下面這個例子會返回文檔中所有 <p> 元素的一個節點列表:

document.getElementsByTagName("p"); 

實例 2

下面這個例子會返回所有 <p> 元素的一個節點列表,且這些 <p> 元素必須是 id 爲 "maindiv" 的元素的後代:

document.getElementById('maindiv').getElementsByTagName("p"); 

節點列表(nodeList)

當我們使用節點列表時,通常要把此列表保存在一個變量中,就像這樣:

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];
 
    獲取及改變節點屬性的值
    getAttribute("屬性名");
    setAttribute("屬性名","屬性值");
 
    2. 根據層次關係查找節點

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> 標籤的直接訪問。

 

創建和增加節點

createElement(tagName) 按照給定的標籤名稱創建一個新的元素節點

appendChild(nodeName) 向已存在節點列表的末尾添加新的子節點

insertBefore(newNode,oldNode) 向指定的節點之前插入一個新的子節點

cloneNode(deep) 複製某個指定的節點

 實例:


<!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>
<script type="text/javascript">
    function newNode(){
        var oldNode=document.getElementById("sixty1"); //訪問插入節點的位置
        var image=document.createElement("img"); //創建一個圖片節點
        image.setAttribute("src","images/79043_12541923138NPD.png");    //設置圖片路徑
        document.body.insertBefore(image,oldNode); //插入圖片到sixty1前面
    }
    function copyNode(){
        var image=document.getElementById("sixty1"); //訪問複製的節點
        var copyImage=image.cloneNode(false); //複製指定的節點
        document.body.appendChild(copyImage);        //在頁面最後增加節點
    }
</script>
</head>

<body>
    <input id="b1" type="button" value="增加一幅圖片" οnclick="newNode()" />
    <input id="b2" type="button" value="複製圖片" οnclick="copyNode()" />
    <img src="images/79043_12541923132KUt.png" id="sixty1" alt="白" />
      <img src="images/79043_12541923138NPD.png" id="sixty2" alt="黑" />
</body>
</html>

刪除和替換節點

removeChild(node) 刪除指定的節點

replaceChild(newNode,oldNode) 用其他的節點替換指定的節點

<!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>
<script type="text/javascript">
    function delNode(){
        var dNode=document.getElementById("w"); //訪問被刪除的節點
        document.body.removeChild(dNode);
    }
    function repNode(){
        var oldimage=document.getElementById("b"); //訪問被替換的節點
        var newimage=document.createElement("img");//創建一個圖片節點
        newimage.setAttribute("src","images/w.png"); //設置圖片路徑
        document.body.replaceChild(newimage,oldimage); //替換原來的圖片
    }
</script>
</head>

<body>
    <input id="b1" type="button" value="刪除圖片" οnclick="delNode()" />
    <input id="b1" type="button" value="替換圖片" οnclick="repNode()" /><br />
    <img src="images/w.png" id="w" alt="白" />
    <img src="images/b.png" id="b" altt="黑" />

</body>
</html>





HTML DOM 的特有對象和操作
 
IE: Internet Explorer, F: Firefox, O: Opera,W3C: W3C 標準.

Table 對象集合

集合 描述 IE F O W3C
cells[] 返回包含表格中所有單元格的一個數組。 5 1 1 No
rows[] 返回包含表格中所有行的一個數組。 4 1 9 Yes
tBodies[] 返回包含表格中所有 tbody 的一個數組。 4     Yes
 

Table 對象屬性

屬性 描述 IE F O W3C
align 表在文檔中的水平對齊方式。(已廢棄) - - - -
bgColor 表的背景顏色。(已廢棄) - - - -
border 設置或返回表格邊框的寬度。 4 1 9 Yes
caption 對錶格的 <caption> 元素的引用。 4 1 9 Yes
cellPadding 設置或返回單元格內容和單元格邊框之間的空白量。 4 1 9 Yes
cellSpacing 設置或返回在表格中的單元格之間的空白量。 4 1 9 Yes
frame 設置或返回表格的外部邊框。 4 1 9 Yes
id 設置或返回表格的 id。 4 1 9 Yes
rules 設置或返回表格的內部邊框(行線)。 4 1 9 Yes
summary 設置或返回對錶格的描述(概述)。 6 1 9 Yes
tFoot 返回表格的 TFoot 對象。如果不存在該元素,則爲 null。 4 1 9 Yes
tHead 返回表格的 THead 對象。如果不存在該元素,則爲 null。 4 1 9 Yes
width 設置或返回表格的寬度。 4 1 9 Yes

標準屬性

屬性 描述 IE F O W3C
className 設置或返回元素的 class 屬性。 5 1 9 Yes
dir 設置或返回文本的方向。 5 1 9 Yes
lang 設置或返回元素的語言代碼。 5 1 9 Yes
title 設置或返回元素的 title 屬性。 5 1 9 Yes

Table 對象方法

方法 描述 IE F O W3C
createCaption() 爲表格創建一個 caption 元素。 4 1 9 Yes
createTFoot() 在表格中創建一個空的 tFoot 元素。 4 1 9 Yes
createTHead() 在表格中創建一個空的 tHead 元素。 4 1 9 Yes
deleteCaption() 從表格刪除 caption 元素以及其內容。 4 1 9 Yes
deleteRow() 從表格刪除一行。 4 1 9 Yes
deleteTFoot() 從表格刪除 tFoot 元素及其內容。 4 1 9 Yes
deleteTHead() 從表格刪除 tHead 元素及其內容。 4 1 9 Yes
insertRow() 在表格中插入一個新行。 4 1 9 Yes
 

TableRow 對象

TableRow 對象代表一個 HTML 表格行。

在 HTML 文檔中 <tr> 標籤每出現一次,一個 TableRow 對象就會被創建。

IE: Internet Explorer, F: Firefox, O: Opera, W3C: W3C 標準.

TableRow 對象集合

集合 描述 IE F O W3C
cells[] 返回包含行中所有單元格的一個數組。 4 1 9 Yes

TableRow 對象屬性

屬性 描述 IE F O W3C
align 設置或返回在行中數據的水平排列。 4 1 9 Yes
ch 設置或返回在行中單元格的對齊字符。       Yes
chOff 設置或返回在行中單元格的對齊字符的偏移量。       Yes
id 設置或返回行的 id。 4 1 9 Yes
innerHTML 設置或返回行的開始標籤和結束標籤之間的 HTML。 5 1 9 No
rowIndex 返回該行在表中的位置。 4 1 9 Yes
sectionRowIndex 返回在 tBody 、tHead 或 tFoot 中,行的位置。       Yes
vAlign 設置或返回在行中的數據的垂直排列方式。 4 1 9 Yes

TableRow 對象方法

方法 描述 IE F O W3C
deleteCell() 刪除行中的指定的單元格。 4 1 9 Yes
insertCell() 在一行中的指定位置插入一個空的 <td> 元素。 4 1 9 Yes

TableCell 對象

TableCell 對象代表一個 HTML 表格單元格。

在一個 HTML 文檔中 <td> 標籤每出現一次,一個 TableCell 對象就會被創建。

IE: Internet Explorer, F: Firefox, O: Opera, W3C: W3C 標準.

TableCell 對象屬性

屬性 描述 IE F O W3C
abbr 設置或返回單元格中內容的縮寫版本。 6 1 9 Yes
align 設置或返回單元格內部數據的水平排列方式。 4 1 9 Yes
axis 設置或返回相關單元格的一個逗號分隔的列表。 6 1 9 Yes
cellIndex 返回單元格在某行的單元格集合中的位置。 4 1 9 Yes
ch 設置或返回單元格的對齊字符。       Yes
chOff 設置或返回單元格的對齊字符的偏移量。       Yes
colSpan 單元格橫跨的列數。 4 1 9 Yes
headers 設置或返回 header-cell 的 id 值。       Yes
id 設置或返回單元格的 id。 4 1 9 Yes
innerHTML 設置或返回單元格的開始標籤和結束標籤之間的 HTML。 4 1 9 No
rowSpan 設置或返回單元格可橫跨的行數。 4 1 9 Yes
scope 設置或返回此單元格是否可提供標籤信息。       Yes
vAlign 設置或返回表格單元格內數據的垂直排列方式。 4 1 9 Yes
width 設置或返回單元格的寬度。 4 1 9 Yes

標準屬性

屬性 描述 IE F O W3C
className 設置或返回元素的 class 屬性。 5 1 9 Yes
dir 設置或返回文本的方向。 5 1 9 Yes
lang 設置或返回元素的語言代碼。 5 1 9 Yes
title 設置或返回元素的 title 屬性。 5 1 9 Yes


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章