JavaScript常用DOM的API

在介紹DOM的API之前,先介紹下一些DOM基本概念。

DOM,文檔對象模型,把文檔樹當成對象來看的模型。
DOM 是 JavaScript 操作網頁的接口,全稱為“文檔對象模型”(Document Object Model)。它的作用是將網頁轉為一個 JavaScript 對象,從而可以用腳本進行各種操作(比如增刪內容)。

節點(Node)

節點是有DOM樹所形成的樹形結構所產生的連接點。DOM樹是由節點構成的集合。

節點(Node)的類型有七種:

  • Document : 整個文檔樹的頂層節點
  • DocumentType : doctype標簽(比如<!DOCTYPE html>)
  • Element : 網頁的各種HTML標簽
  • Attribute : 網頁元素的屬性
  • Text : 標簽之間或標簽包含的文本
  • Comment : 注釋
  • DocumentFragment : 文檔的片段

節點(Node)接口的屬性

所有 DOM 節點都繼承了 Node 接口,擁有一些共同的屬性和方法。這是 DOM 操作的基礎。

  • Node.nodeType 屬性返回一個整數值,表示節點的類型

  • 不同節點的nodeType屬性值和對應的常量:
    文檔節點(document):9,對應常量Node.DOCUMENT_NODE
    元素節點(element):1,對應常量Node.ELEMENT_NODE
    屬性節點(attr):2,對應常量Node.ATTRIBUTE_NODE
    文本節點(text):3,對應常量Node.TEXT_NODE
    文檔片斷節點(DocumentFragment):11,對應常量Node.DOCUMENT_FRAGMENT_NODE
    文檔類型節點(DocumentType):10,對應常量Node.DOCUMENT_TYPE_NODE
    注釋節點(Comment):8,對應常量Node.COMMENT_NODE

  • Node.nodeName屬性返回節點的名稱。

  • 不同節點的nodeName屬性值如下:
    文檔節點(document):#document
    元素節點(element):大寫的標簽名
    屬性節點(attr):屬性的名稱
    文本節點(text):#text
    文檔片斷節點(DocumentFragment):#document-fragment
    文檔類型節點(DocumentType):文檔的類型
    注釋節點(Comment):#comment

  • nodeValue屬性返回一個字符串,表示當前節點本身的文本值,該屬性可讀寫。

  • 只有文本節點(text)和注釋節點(comment)有文本值,因此這兩類節點的nodeValue可以返回結果,其他類型的節點一律返回null。

  • Node.textContent返回當前節點和它的所有后代節點的文本內容。textContent屬性自動忽略當前節點內部的 HTML 標簽,返回所有文本內容。

  • baseURI屬性返回一個字符串,表示當前網頁的絕對路徑。瀏覽器根據這個屬性,計算網頁上的相對路徑的 URL。該屬性為只讀。

  • Node.ownerDocument屬性返回當前節點所在的頂層文檔對象,即document對象。

  • document對象本身的ownerDocument屬性,返回null。

  • Node.nextSibling 屬性返回緊跟在當前節點后面的****第一個同級節點。如果當前節點后面沒有同級節點,則返回null。

  • Node.previousSibling屬性返回當前節點前面的、距離最近的一個同級節點。如果當前節點前面沒有同級節點,則返回null。

  • Node.parentNode屬性返回當前節點的父節點。對于一個節點來說,它的父節點只可能是三種類型:元素節點(element)、文檔節點(document)和文檔片段節點(documentfragment)。

  • Node.parentElement屬性返回當前節點的父元素節點。如果當前節點沒有父節點,或者父節點類型不是元素節點,則返回null。

  • 由于父節點只可能是三種類型:元素節點、文檔節點(document)和文檔片段節點(documentfragment)。parentElement屬性相當于把后兩種父節點都排除了。

  • Node.firstChild屬性返回當前節點的第一個子節點,如果當前節點沒有子節點,則返回null。

  • 注意,firstChild返回的除了元素節點,還可能是文本節點或注釋節點。

  • Node.lastChild屬性返回當前節點的最后一個子節點,如果當前節點沒有子節點,則返回null。用法與firstChild屬性相同。

  • NodechildNodes屬性返回一個類似數組的對象(NodeList集合),成員包括當前節點的所有子節點。

  • 文檔節點(document)就有兩個子節點:文檔類型節點(docType)和 HTML 根元素節點。

  • Node.isConnected屬性返回一個布爾值,表示當前節點是否在文檔之中。

  • ...

節點(Node)接口的方法

  • appendChild()方法接受一個節點對象作為參數,將其作為最后一個子節點,插入當前節點。該方法的返回值就是插入文檔的子節點。

  • hasChildNodes()方法返回一個布爾值,表示當前節點是否有子節點。

  • 判斷一個節點有沒有子節點,有許多種方法,下面是其中的三種:

    1. node.hasChildNodes()
    2. node.firstChild !== null
    3. node.childNodes && node.childNodes.length > 0
  • cloneNode()方法用于克隆一個節點。它接受一個布爾值作為參數,表示是否同時克隆子節點。它的返回值是一個克隆出來的新節點。
    該方法有一些使用注意點
    (1)克隆一個節點,會拷貝該節點的所有屬性,但是會喪失addEventListener方法和on-屬性(即node.onclick = fn),添加在這個節點上的事件回調函數。
    (2)該方法返回的節點不在文檔之中,即沒有任何父節點,必須使用諸如Node.appendChild這樣的方法添加到文檔之中。
    (3)克隆一個節點之后,DOM 有可能出現兩個有相同id屬性(即id="xxx")的網頁元素,這時應該修改其中一個元素的id屬性。如果原節點有name屬性,可能也需要修改。

  • insertBefore()方法用于將某個節點插入父節點內部的指定位置。
    -
    * insertBefore()***方法接受兩個參數,第一個參數是所要插入的節點newNode,第二個參數是父節點parentNode內部的一個子節點referenceNode。newNode將插在referenceNode這個子節點的前面。返回值是插入的新節點newNode

  • removeChild()*方法接受一個子節點作為參數,用于從當前節點移除該子節點。返回值是移除的子節點。

  • replaceChild()方法用于將一個新的節點,替換當前節點的某一個子節點。

  • contains()方法返回一個布爾值,表示參數節點是否滿足以下三個條件之一。

    1. 參數節點為當前節點。
    2. 參數節點為當前節點的子節點。
    3. 參數節點為當前節點的后代節點。
  • isEqualNode()*方法返回一個布爾值,用于檢查兩個節點是否相等。所謂相等的節點,指的是兩個節點的類型相同、屬性相同、子節點相同。

  • isSameNode()*方法返回一個布爾值,表示兩個節點是否為同一個節點。

  • normailize()*方法用于清理當前節點內部的所有文本節點(text)。它會去除空的文本節點,并且將毗鄰的文本節點合并成一個,也就是說不存在空的文本節點,以及毗鄰的文本節點。

  • getRootNode()*方法返回當前節點所在文檔的根節點。

  • ...

NodeList 接口

節點都是單個對象,有時需要一種數據結構,能夠容納多個節點。DOM 提供兩種節點集合,用于容納多個節點:NodeListHTMLCollection

這兩種集合都屬于接口規范。許多 DOM 屬性和方法,返回的結果是NodeList實例或HTMLCollection實例。
注意,NodeList 實例可能是動態集合,也可能是靜態集合。

所謂動態集合就是一個活的集合,DOM 刪除或新增一個相關節點,都會立刻反映在 NodeList 實例。

目前,只有Node.childNodes返回的是一個動態集合,其他的 NodeList 都是靜態集合。

HTMLCollection 接口

HTMLCollection是一個節點對象的集合,只能包含元素節點(element),不能包含其他類型的節點。它的返回值是一個類似數組的對象,但是與NodeList接口不同,HTMLCollection沒有forEach方法,只能使用for循環遍歷。

返回HTMLCollection實例的,主要是一些Document對象的集合屬性,比如document.links、docuement.forms、document.images等。

HTMLCollection實例都是動態集合,節點的變化會實時反映在集合中。


這里只羅列了一部分DOM的節點API。把常見的掌握了,如果想了解更多的API,建議查看官方文檔。
DOM的API挺反人類的,并不是很友好,所以就產生了jQuery....

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容

  • ??DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API(應用程序編程接口)。 ??DOM 描繪...
    霜天曉閱讀 3,679評論 0 7
  • 基本概念 DOM DOM 是 JavaScript 操作網頁的接口,全稱為“文檔對象模型”(Document Ob...
    許先生__閱讀 889評論 0 1
  • 第10章 DOM 1. 節點層次 文檔節點是每個文檔的根節點。 (1) Node 類型 每個節點都有一個 node...
    yinxmm閱讀 403評論 0 0
  • 一、基本概念 1.1、DOM DOM是JS操作網頁的接口,全稱為“文檔對象模型”(Document Object ...
    周花花啊閱讀 3,211評論 0 6
  • 1 什么是DOM 文檔對象模型 (DOM) 是HTML和XML文檔的編程接口。它提供了對文檔的結構化的表述,并定義...
    YyzclYang閱讀 1,823評論 0 0