DOM API 獲取元素的 N 種方法

什么是DOM?

DOM:Document Object Model

DOM翻譯過來是文檔對象模型,是HTML和XML文檔的編程接口。它提供了對文檔的結構化的表述,并定義了一種方式可以使從程序中對該結構進行訪問,從而改變文檔的結構,樣式和內容。DOM 將文檔解析為一個由節點和對象(包含屬性和方法的對象)組成的結構集合。簡言之,它會將web頁面和腳本或程序語言連接起來。

說白了DOM就是瀏覽器為JavaScript提供的一系列接口,通過這些接口我們可以操作web頁面。

DOM節點

DOM的最小組成單位叫做節點(node)。文檔的樹形結構(DOM樹),就是由各種不同類型的節點組成。節點有以下7種類型

Document:整個文檔樹的頂層節點(root node)

DocumentType: doctype標簽

Element:網頁的各種HTML標簽

Attribute:網頁元素的屬性

Text:標簽之間包含的文本內容

Comment:注釋

DocumentFragment:文檔片段

節點間的關系

除了根節點,它的下級節點與周圍節點存在三種關系

父節點關系:parentNode

子節點關系:childNodes

firstChild:第一個子節點

lastChild:最后一個子節點

同級節點關系:sibling

nextSibling:緊鄰在后的那個同級節點

previousSibling:緊鄰在前的那個同級節點

DOM API 獲取元素的 N 種方法

(1) 通過頂層document節點獲取:

? ? 1. 通過ID獲取元素

doument.getElementById(“elementId”)

返回擁有指定id的第一個元素,id為大小寫敏感的字符串,如果不存在則返回null。如果頁面上含有多個相同id的節點,那么只返回第一個節點。

? ?2. 通過節點名獲取元素

document.getElementsByName(“elementsName”)

name 為字符串(String),該方法是通過節點的name獲取節點,返回的有同樣名稱的節點數組。通過要獲取節點的某個屬性來循環判斷是否為需要的節點

? ?3. 通過節點標簽名稱獲取元素

document.getElementByTagName(“tagName”)

該方法是通過節點的Tag獲取節點,該方法與document.getElementsByName()相似,同樣返回一個數組

? ?4. 通過元素類名獲取元素

document.getElementsClassName(“classname”)

同樣返回的是一個數組,當調用發生在document對象上時, 整個DOM都會被搜索, 包含根節點

?5. querySelector 和querySelectorall

querySelector:

語法:element = document.querySelector(selectors),接受一個css選擇器作為參數,返回匹配該選擇器的第一個節點,如果沒有匹配的節點返回null。selectors是一個字符串,包含一個或者多個css選擇器,多個以逗號分隔

querySelectorAll:

該方法返回所有滿足條件的元素,結果是個nodeList集合。

(2) 通過父節點獲取:

? 1. parentObj.firstChild:如果節點為已知節點(parentObj)的第一個子節點就可以使用這個方法。這個屬性是可以遞歸使用的,也就是支持parentObj.firstChild.firstChild.firstChild...的形式,如此就可以獲得更深層次的節點。

? 2. parentObj.lastChild:很顯然,這個屬性是獲取已知節點(parentObj)的最后一個子節點。與firstChild一樣,它也可以遞歸使用。

? 3. parentObj.childNodes:獲取已知節點的子節點數組,然后可以通過循環或者索引找到需要的節點。

? 4. parentObj.children:獲取已知節點的直接子節點數組。

? 5. parentObj.getElementsByTagName(tagName):使用方法不再贅述,它返回已知節點的所有子節點中類型為指定值的子節點數組。例如:parentObj.getElementsByTagName('A')返回已知的子節點中的所有超鏈接。

(3) 通過臨近節點獲取:

1. neighbourNode.previousSibling:獲取已知節點(neighbourNode)的前一個節點,這個屬性和前面的firstChild、lastChild一樣都似乎可以遞歸使用的。

2. neighbourNode.nextSibling:獲取已知節點(neighbourNode)的下一個節點,同樣支持遞歸。

(4) 通過子節點獲取:

? ?childNode.parentNode:獲取已知節點的父節點。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容