DOM樹
Node類型
JavaScript中的所有節點類型都繼承自Node類型。
nodeType
:
- Node.ELEMENT_NODE(1);
- Node.ATTRIBUTE_NODE(2);
- Node.TEXT_NODE(3);
- Node.CDATA_SECTION_NODE(4);
- Node.ENTITY_REFERENCE_NODE(5);
- Node.ENTITY_NODE(6);
- Node.PROCESSING_INSTRUCTION_NODE(7);
- Node.COMMENT_NODE(8);
- Node.DOCUMENT_NODE(9);
- Node.DOCUMENT_TYPE_NODE(10);
- Node.DOCUMENT_FRAGMENT_NODE(11);
- Node.NOTATION_NODE(12);
節點關係
每個節點都有一個childNodes
屬性,其中保存着一個NodeList
對象。NodeList是一種類數組對象,可以使用方括號或item()
來獲取元素,用length
來獲取長度,但它不是Array實例。它的特殊之處在與,它實際上是基於DOM結構動態執行查詢的結果,因此DOM結構的變化能自動反映在NodeList對象中。NodeList是有生命,有呼吸的對象,而不是在某個瞬間拍攝的快照。
hasChildNodes()
:在節點包含子節點時返回true
ownerDocument
:該屬性指向表示整個文檔的文檔節點
操作節點
appendChild(node A)
: 從末尾插入insertBefore(node A, node B)
: insert A before BreplaceChild(node A, node B)
: replace B to AremoveChild(node A)
cloneNode(true / false)
: 複製調用該方法的節點。不會複製添加到DOM節點中的JavaScript屬性- true: 深複製,複製節點及其整個子節點樹
- false:淺複製,只複製節點
Document類型(nodeType=9)
document對象是window對象的一個屬性,因此可以將其作爲全局對象來訪問。它是隻讀的。
屬性
-
documentElement:始終指向HTML頁面中的
<html>
元素 -
body:直接指向
<body>
元素 -
title:
<title>
元素的文本 -
URL:頁面完整的URL
-
domain:頁面的域名。可以設置,但不能設置爲URL中不包含的域,並且只能從緊湊到鬆散單方向設置。如:
// 假設頁面來自p2p.wrox.com document.domain = "wrox.com"; //成功 document.domain = "nczonline.net"; //失敗
-
referrer:鏈接到當前頁面的原頁面的URL
方法
查找
getElementById()
:首次匹配getElementsByTagName()
:返回HTMLCollection
對象。類似NodeList,也是一個“動態“集合。getElementsByName()
HTMLLocation對象
可以通過方括號或者名稱訪問項。
假如方括號內是數字,則實際上會調用item()方法,以索引取得值,假如方括號內是字符串,則會調用namedItem(),以元素的name屬性取得值
文檔寫入
將輸出流寫入到網頁
write()
writeln()
open()
close()
Text 類型
通過nodeValue
屬性或者data
屬性訪問Text節點中的文本。
TextNode一般是ElementNode節點的子節點。因此,採用firstChild
或者childNodes[]
來訪問
方法
appendData(text)
:在原有的text後面增加文本deleteData(offset, count)
insertData(offset, text)
replaceData(offset, count, text)
splitText(offset)
:與normalize相反,從offset處分割substringData(offset, count)
normalize()
:將多個text子節點合併
屬性
- length
Attr類型
特性節點一般不認爲是DOM樹的一部分,因此開發人員不會直接去操作Attr節點
方法
element:
getAttribute(name)
:返回屬性getAttributeNode(name)
: 返回nodesetAttribute(name, value)
:設置屬性setAttributeNode(node)
:添加節點removeAttribute()
document:
createAttribute(name)
屬性
- value:特性的值
- name:特性名稱
NodeList
NodeList和它的近親NameNodedMap和HTMLCollection都是動態的。每次訪問這些集合都會實時更新。