国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > HTML > 正文

解析HTML中的DOM

2020-03-24 18:22:56
字體:
來源:轉載
供稿:網友
[導讀] DOM是所有前端開發每天打交道的東西,但是隨著jQuery等庫的出現,大大簡化了DOM操作,導致大家慢慢的“遺忘”了它的本來面貌。不過,要想深入學習前端知識,對DOM的了解是不可或缺的,所以本文力圖系統的講解下DOM的相關知識,如有遺漏或錯誤,還請大家指出一起討論。

DOM是所有前端開發每天打交道的東西,但是隨著jQuery等庫的出現,大大簡化了DOM操作,導致大家慢慢的“遺忘”了它的本來面貌。不過,要想深入學習前端知識,對DOM的了解是不可或缺的,所以本文力圖系統的講解下DOM的相關知識,如有遺漏或錯誤,還請大家指出一起討論^ ^。

一、DOM是什么?

DOM(文檔對象模型)是針對HTML和XML文檔的一個API,通過DOM可以去改變文檔。

這個說法很官方,大家肯定還是不明白。

舉個例子:我們有一段HTML,那么如何訪問第二層第一個節點呢,如何把最后一個節點移動到第一個節點上面去呢?

DOM就是定義了如果做類似操作,那么應該怎么做的標準。比如用getElementById來訪問節點,用insertBefore來插入節點。

瀏覽器載入HTML時,會生成相應的DOM樹。

簡而言之,DOM可以理解為一個訪問或操作HTML各種標簽的實現標準。


對于一個HTML來說,文檔節點Document(看不到的)是它的根節點,對應的對象便是document對象(嚴格講是子類HTMLDocument對象,下面單獨介紹Document類型時會指出)。

換句話說存在一個文檔節點Document,然后它有子節點,比如通過document.getElementsByTagName(“html”),得到類型為元素節點的Element html。


每一段HTML標記都可以用相應的節點表示,例如:

HTML元素通過元素節點表示,注釋通過注釋節點表示,文檔類型通過文檔類型節點表示等。

一共定義了12種節點類型,而這些類型又都繼承自Node類型。

所以我們首先講Node類型,因為這個類型的方法是所有節點都會繼承的。

二、Node類型(基類,所有節點都繼承了它的方法)

Node是所有節點的基類型,所有節點都繼承自它,所以所有節點都有一些共同的方法和屬性。

先講Node類型的屬性

首先是nodeType屬性,用來表明節點類型的,例如:


document.nodeType; // 返回 9 ,其中document對象為文檔節點Document的實例


這里面,9代表的就是DOCUMENT_NODE節點的意思,可以通過Node.DOCUMENT_NODE查看節點對應的數字


document.nodeType === Node.DOCUMENT_NODE; // true


至于一共有哪些節點,每個節點對應的數字又是多少,這個可以問谷歌就知道了。反正常用的就是元素節點Element(對應數字為1)和文本節點Text(對應數字為3)

然后常用的還有nodeName和nodeValue

對于元素節點 nodeName就是標簽名,nodeValue就是null

對于文本節點 nodeName為”#text”(chrome里面測試的),nodeValue就是實際的值

每個節點還有childNodes屬性,這是個十分重要的屬性,它保存了這個節點所有直接子元素

調用childNodes返回的是一個NodeList對象,它極其像數組,但是有一個最關鍵的地方,它是動態查詢的,也就是說每次調用它都會對DOM結構查詢,所以對它的使用需要慎重,注意性能。

訪問childNodes可以使用數組下表或者item方法

然后各個節點還存在各種屬性讓它們可以相互訪問,下圖很好的總結了

/


比較有用的方法和屬性:

1、hasChildNodes()

如果包含子節點就返回true,比查詢childNodes的length來的簡單。

2、ownerDocument

返回文檔節點的引用(在html里面也就是document對象)


再介紹下Node類型常用的方法

appendChild()方法可以在節點的childNodes的末尾增加一個節點,值得注意的是如果這個節點是已經存在在文檔中的,那么便會刪除原節點,感覺上就像是移動節點一樣。

insertBefore()方法接受兩個參數,一個是插入的節點,另外一個是參照的節點。如果第二個參數為null,則insertBefore和appendChild效果一樣。否則便會把節點插入到參照節點之前。這里要注意的是,如果第二個參數不為null,那么插入的節點不能是已經存在的節點。

replaceChild()方法可以替換節點,接受兩個參數,需要插入的節點和需要替換的節點。返回被替換掉的節點。

removeChild()移除節點。這里有個常見需求,比如我有一個節點 #waste-node ,那么如何移除它呢?


var wasteNode = document.getElementById( waste-node wasteNode.parentNode.removeClhid(wasteNode); // 先拿到父節點,再調用removeClild刪除自己        

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陆良县| 大埔区| 平山县| 耿马| 泸定县| 宜城市| 务川| 响水县| 通海县| 墨江| 吴江市| 三穗县| 南木林县| 广德县| 夹江县| 渭源县| 深水埗区| 太白县| 金华市| 襄汾县| 南江县| 佛教| 清新县| 调兵山市| 页游| 仪征市| 依安县| 田林县| 城口县| 瓮安县| 涪陵区| 河源市| 噶尔县| 平山县| 嘉鱼县| 新干县| 凤山县| 鹤山市| 吴忠市| 江西省| 江西省|