XML DOM 節點列表

getElementsByTagName() 方法和 childNodes 屬性可返回節點的列表。

DOM 節點列表

當使用 childNodesgetElementsByTagName() 等屬性或方法時,將返回 NodeList 對象。

NodeList 對象表示節點的列表,其順序與 XML 中的順序相同。

節點列表中的節點可通過從 0 開始的索引號進行訪問。

下圖表示 books.xml 中 <title> 元素的節點列表:

DOM 節點列表

假設 "books.xml" 已被加載到變量 xmlDoc 中。

此代碼片段返回 "books.xml" 中 title 元素的節點列表:

x = xmlDoc.getElementsByTagName("title");

執行完上面的語句后,x 就成為一個 NodeList 對象。

以下代碼片段返回節點列表 (x) 中第一個 <title> 元素的文本:

實例

var txt = x[0].childNodes[0].nodeValue;

親自試一試

執行上述語句后,txt = "雅舍談吃"。

節點列表長度

NodeList 對象會保持自身的更新。如果刪除或添加了元素,列表會自動更新。

節點列表的 length 屬性是列表中節點的數量。

這段代碼返回 "books.xml" 中 <title> 元素的數量:

x = xmlDoc.getElementsByTagName('title').length;

上面的語句執行后,x 的值為 5。

節點列表的長度可用于循環遍歷列表中的所有元素。

這段代碼使用 length 屬性循環來遍歷 <title> 元素列表:

實例

x = xmlDoc.getElementsByTagName('title');
xLen = x.length;
for (i = 0; i <xLen; i++) {
    txt += x[i].childNodes[0].nodeValue) + " ";
}

親自試一試

例子解釋:

  1. 假設 books.xml 已被加載到 xmlDoc
  2. 設置 x 變量以保存所有 title 元素的節點列表
  3. 從 <title> 元素中獲取文本節點的值

DOM 屬性列表(命名節點映射)

元素節點的 attributes 屬性返回屬性節點的列表。

這被稱為命名節點映射(named node map),與節點列表類似,只是方法和屬性有所不同。

屬性列表也會保持最新。如果刪除或添加屬性,列表會自動更新。

這段代碼從 "books.xml" 中的第一個 <book> 元素返回屬性節點列表:

x = xmlDoc.getElementsByTagName('book')[0].attributes;

上面的代碼執行后,x.length 等于屬性的數量,可使用 x.getNamedItem() 返回一個屬性節點。

這段代碼獲取第一本書的 "category" 屬性的值,以及屬性的數量:

實例

x = xmlDoc.getElementsByTagName("book")[0].attributes;
txt = x.getNamedItem("category").nodeValue + " " + x.length;

親自試一試

例子解釋:

  1. 假設 books.xml 被加載到 xmlDoc
  2. 設置 x 變量以保存第一個 <book> 元素的所有屬性的列表
  3. 獲取 "category" 屬性的值以及屬性列表的長度