1. 節(jié)點類型nodeType
1 element(元素)
2 attribute(屬性)
3 text(文本)
8 comment(注釋)
9 document
2. 節(jié)點關(guān)系
childNodes 訪問元素的子節(jié)點,其中保存著一個NodeList對象,它是一種類數(shù)組對象。將NodeList轉(zhuǎn)換為數(shù)組:
function convertToArray(nodes) {
var array = null;
try {
array = Array.prototype.slice.call(nodes,0);
} catch (ex) {
array = new Array();
for(var i = 0, len = nodes.length; i < len; i++) {
array.push(nodes[i]);
}
}
return array;
}
parentNode 指向文檔樹中的父節(jié)點
previousSibling 訪問節(jié)點的上一個同胞(兄弟)節(jié)點
nextSibling 訪問節(jié)點的下一個同胞(兄弟)節(jié)點
firstChild 指向childNodes列表中的第一個子節(jié)點
lastChild 指向childNodes列表中的最后一個子節(jié)點,只有一個節(jié)點的情況下,firstChild和lastChild指向同一個節(jié)點,如果沒有子節(jié)點,則均為null
ownerDocument 指向表示整個文檔的文檔節(jié)點
hasChildNodes() 在節(jié)點包含一個或多個子節(jié)點的情況下返回true
(以下屬性返回的元素都不包含空白文本節(jié)點)
childElementCount 返回子元素(不包括文本節(jié)點和注釋)的個數(shù)
firstElementChild 指向第一個子元素
lastElementChild 指向最后一個子元素
previousElementSibling 指向前一個同輩元素
nextElementSibling 指向后一個同輩元素
children 指向元素中同樣還是元素的子節(jié)點
contains(node) 被檢測的節(jié)點是不是該節(jié)點的后代。接收一個參數(shù),即要檢測的后代節(jié)點,是返回true,否則返回false
3. 操作節(jié)點
appendChild(someNode) 向childNodes的末尾添加一個節(jié)點,如果傳入到appendChild()中的節(jié)點已經(jīng)是文檔的一部分了,那結(jié)果就是將該節(jié)點從原來的的位置移到新位置
insertBefore(newNode, someNode) 在某個特定的位置之前插入節(jié)點,接收兩個參數(shù),分別是要插入的節(jié)點和作為參考的節(jié)點,如果參照節(jié)點是null,那么insertBefore()和appendChild()執(zhí)行相同的操作
replaceChild(newNode, replaceNode) 替換某個指定的節(jié)點。接收兩個參數(shù),分別是要插入的節(jié)點和要替換的節(jié)點
removeNode(someNode) 移除某個節(jié)點。
cloneNode() 復(fù)制某個節(jié)點。接收一個布爾值,表示是否進行深復(fù)制。參數(shù)為true,執(zhí)行深復(fù)制,即復(fù)制節(jié)點及其整個子節(jié)點樹;參數(shù)為false,執(zhí)行淺復(fù)制,只復(fù)制節(jié)點本身
normalize() 處理文檔樹種的文本節(jié)點。如果在包含兩個或多個文本節(jié)點的父元素上調(diào)用normalize()方法,則會將所有文本節(jié)點合并成一個節(jié)點
4. 文檔子節(jié)點和文檔信息
document.documentElement 取得對<html>的引用
document.body 取得對<body>的引用
document.doctype 取得對<!DOCTYPE>的引用(瀏覽器對其的支持差別很大)
document.title 取得文檔的標(biāo)題
document.URL 取得完整的URL
document.domain 取得域名
document.referrer 取得鏈接到當(dāng)前頁面的那個頁面的URL
5. 查找元素
document.getElementById() 通過元素的ID查找,唯一性
document.getElementsByTagName() 通過標(biāo)簽名
document.getElementsByName() 通過元素的Name屬性的值(IE容錯能力較強,會得到一個數(shù)組,其中包括id等于name值的),只用HTMLDocument類型才有
(擴展)
querySelector() 接收一個CSS選擇符,返回與該選擇符匹配的第一個元素
querySelectorAll() 接收一個CSS選擇符,返回所有匹配的元素,返回的是一個NodeList的實例
matchesSelector() 接收一個CSS選擇符,如果調(diào)用元素與該選擇符匹配,返回true,否則,返回false。(大多數(shù)瀏覽器還不支持,需要加前綴ms/moz/webkit才支持)
getElementsByClassName() (HTML5新增)通過類名查找,可以接收一個或多個類名
6. 取得特性
getAttribute() 獲得特性,一個參數(shù),要獲取的特性名
setAttribute() 設(shè)置特性,兩個參數(shù),要設(shè)置的特性名和值
removeAttribute() 刪除特性
7. 創(chuàng)建元素
document.createElement() 創(chuàng)建新元素,接收一個參數(shù),即要創(chuàng)建元素的標(biāo)簽名
document.createTextNode() 創(chuàng)建新文本節(jié)點,接收一個參數(shù),即要插入節(jié)點的文本
document.createDocumentFragment() 創(chuàng)建文檔片段,文檔片段是一種“輕量級”的文檔,可以包含和控制節(jié)點,但不會像完整文檔那樣占用額外的資源
8. 其他
classLists HTML5新增,一種操作類名的方式,可以獲得元素類名的集合
document.activeElement 指向DOM中當(dāng)前獲得了焦點的元素,文檔加載期間為null,文檔加載完成后保存的是document.body中的元素的引用
document.hasFocus() 用于確定文檔是否獲得了焦點
document.readyState 有兩個可能的值,loading(正在加載文檔)和complete(已經(jīng)加載完文檔),通常通過它來實現(xiàn)一個指示文檔已經(jīng)加載完成的指示器
document.compatMode 告訴開發(fā)人員瀏覽器采用了那種渲染模式。在標(biāo)準(zhǔn)模式下,它的值為“CSS1Compat”,而在混雜模式下,它的值為“BackCompat”
document.head HTML新增,引用文檔的<head>元素
dataset HTML5規(guī)定可以為元素添加非標(biāo)準(zhǔn)的屬性,但要添加前綴data-。通過dataset可以來訪問自定義的屬性的值,如:
<div data-appId="1234"></div>
var appid = div.dataset.appId;
innerHTML 返回與調(diào)用元素的所有子節(jié)點(包括元素、注釋和文本節(jié)點)對應(yīng)的HTML標(biāo)記
outerHTML 返回調(diào)用它的元素及所有子節(jié)點的HTML標(biāo)簽
innerText 元素中包含的所有文本的內(nèi)容,包括自文檔樹中的文本。它會過濾掉HTML標(biāo)簽,將其轉(zhuǎn)化為文本。如:
<div id="content">Hello World!</div>
div.innerText = "Hello & welcome, <b>\"reader\"!</b>";
//會變成
<div id="content">Hello & welcome, <b&bt;"reader"!<b&bt;"</div>
outerText 除了作用范圍擴大到了包圍調(diào)用它的節(jié)點之外,與innerText沒有多大區(qū)別