節(jié)點層次
文檔節(jié)點是每個文檔的根節(jié)點。<html>元素,是document的子節(jié)點,誠摯為文檔元素。文檔元素是文檔的最外層元素,文檔中的其他所有元素都包含在文檔元素中。每個文檔只能有一個文檔元素。在HTML頁面中,文檔元素始終都是<html>元素。在xml中,沒有預定義的元素,因此任何元素都可能成為文檔元素。
Node類型
DOM1級定義了一個Node接口,該接口將由DOM中的所有節(jié)點類型實現(xiàn)。這個Node接口在JavaScript中是作為Node類型實現(xiàn)的;除IE外,在其他所有瀏覽器中都可以訪問到這個類型。JavaScript中的所有節(jié)點類型都繼承自Node類型,因此所有節(jié)點類型都共享著相同的基本屬性和方法。
每個節(jié)點都有一個nodeType屬性,表示節(jié)點的類型。
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
并不是所有節(jié)點類型都受到Web瀏覽器的支持。最常用的就是元素和文本節(jié)點。
nodeName和nodeValue屬性
節(jié)點關系
childNodes:保存一個NodeList對象。NodeList是一個類數(shù)組對象,用于保存一組有序的節(jié)點,可以通過位置來訪問這些節(jié)點。它不是Array的實例。獨特之處在于,它實際上是結余DOM結構動態(tài)執(zhí)行查詢的結果。
訪問方式:someNode.childNodes[1];someNode.childNodes.item(1);
parentNode
previousSibling、nextSibling、firstChild、lastChild
ownerDocument
操作節(jié)點
appendChild
insertBefore
replaceChild
removeChild
其他方法
cloneNode,參數(shù)為true深復制;false,淺復制
normalize
Document類型
在瀏覽器中document對象是HTMLDocument(繼承自Document)的一個實例,表示整個HTML頁面。而且,document對象是window對象的一個屬性。因此可以將其作為全局對象來訪問。
nodeType : 9
nodeName:#document
nodeValue:null
parentNode:null
ownerDocument:null
子節(jié)點類型可能是DocumentType(最多一個)、Element(最多一個)、ProcessingInstruction或Comment。
文檔的子節(jié)點
還有兩個內置的訪問其子節(jié)點的快捷方式。documentElement,始終指向HTML頁面中的<html>元素;childNodes。
document.documentElement;//<html>
document.childNodes[0];//<html>
document.body;//<body>
子節(jié)點DocumentType:<!DOCTYPE>
通過document.doctype屬性訪問,瀏覽器支持不一。
文檔信息
title:<title>,document.title修改該值不會改變title元素
3個與頁面的請求有關:
URL:完整的URL
domain:頁面的域名
referrer:連接到當前頁面的那個頁面的URL
所有這些信息都存在于請求的HTTP頭部,值不過是通過這些屬性讓我們能夠在JavaScript中訪問他們而已。
由于跨域安全限制,來自不同紫玉的頁面無法通過JavaScript通信。而通過將每個頁面的document.domain設置為相同的值,這些頁面就可以互相訪問對方包含的JavaScript對象了。
查找元素
getElementById:要取得的元素的ID,返回一個元素
getElementsByTagName:標簽名,返回一個NodeList,其實是一個HTMLCollection對象。通過方括號、item、namedItem訪問元素。
getElementsByName:name特性
特殊集合:
document.anchors,包含文檔中所有帶name特性的<a>元素
document.applets,
document.forms,包含所有<form>元素,同document.getElementsByTagName("form")
document.images,包含文檔中所有的<img>元素,同document.getElementsByTagName("img")
document.links,包含所有帶有href特性的<a>
DOM一致性檢測
document.implementation的hasFeature方法,兩個參數(shù),要檢測的DOM功能的名稱及版本號。
文檔寫入
write、writeln、open、close
Element類型
nodeType:1
nodeName:元素的標簽名
nodeValue:null
parentNode:可能是Document或Element
子節(jié)點可能是Element、Text、Comment、ProcessingInstruction、CDATASection或EntityReference
標簽名:tagName或nodeName
HTML元素
所有HTML元素都由HTMLElement類型表示,不是直接通過這個類型,也是通過它的子類型表示。
id,元素在文檔中的唯一標識符
title,有關元素的附加說明信息,一般通過工具提示條顯式
lang,元素內容的語言代碼,很少使用
dir,語言的方向,值為ltr或rtl
className,與元素的class特性對應
取得特性
getAttribute
setAttribute
removeAttribute
不經常使用getAttribute,而是只使用對象的屬性。
attributes屬性
包含一個NamedNodeMap,與NodeList類似。
getNamedItem(name)
removeNamedItem(name)
setNamedItem(node)
item(pos)
element.attributes.getNamedItem("id").nodeValue;
element.attributes["id"].nodeValue
創(chuàng)建元素
document.createElement(),只有一個參數(shù),即要創(chuàng)建元素的標簽名。
Text元素
nodeType:3
nodeName:#text
nodeValue:包含的文本
parent:一個Element
不支持子節(jié)點
操作方法:
appendData(text)
deleteData(offset, count)
insertData(offset, text)
replaceData(offset, count, text)
splitText(offset)
substringData(offset, count)
length
修改文本節(jié)點時注意,此時的字符串會經過HTML(或XML)編碼,小于號、大于號或引號都會轉義。
創(chuàng)建文本節(jié)點
document.createTextNode()
規(guī)范化文本節(jié)點
normalize()
分割文本節(jié)點
splitText()
Comment類型
nodeType:8
nodeName:#comment
nodeValue:注釋的內容
parentNode:可能是Document或Element
不支持子節(jié)點
與Text類型繼承自相同的基類,因此擁有除splitText之外的所有字符串操作方法。
document.createComment()
CDATASection類型
只針對XML文檔,表示的是CDATA區(qū)域,與Comment類似,繼承自Text類型,擁有除了splitText外的所有字符串操作方法
nodeType:4
nodeName:#cdata-section
nodeValue:CDATA區(qū)域中的內容
parentNode:可能是Document或Element
不支持子節(jié)點
DocumentType類型
nodeType:10
nodeName:doctype的名稱
nodeValue:null
parentNode:Document?
不支持子節(jié)點
DocumentFragment類型
Attr類型
name:特性名稱
value:值
specified:布爾值,區(qū)別特性是在代碼中指定的,還是默認的
document.createAttribute
DOM操作技術