HTML DOM結(jié)構(gòu)

HTML DOM 定義了訪問(wèn)和操作 HTML 文檔的標(biāo)準(zhǔn)。

什么是 HTML DOM蚂四?

HTML DOM 是:
  • HTML 的標(biāo)準(zhǔn)對(duì)象模型
  • HTML 的標(biāo)準(zhǔn)編程接口
  • W3C 標(biāo)準(zhǔn)
    HTML DOM 定義了所有 HTML 元素的對(duì)象和屬性,以及訪問(wèn)它們的方法迹辐。
HTML DOM 是關(guān)于如何獲取被碗、修改、添加或刪除 HTML 元素的標(biāo)準(zhǔn)跨跨。

DOM 節(jié)點(diǎn)

在 HTML DOM 中,所有事物都是節(jié)點(diǎn)囱皿。DOM 是被視為節(jié)點(diǎn)樹的 HTML勇婴。
DOM 節(jié)點(diǎn)

根據(jù) W3C 的 HTML DOM 標(biāo)準(zhǔn),HTML 文檔中的所有內(nèi)容都是節(jié)點(diǎn):

  • 整個(gè)文檔是一個(gè)文檔節(jié)點(diǎn)
  • 每個(gè) HTML 元素是元素節(jié)點(diǎn)
  • HTML 元素內(nèi)的文本是文本節(jié)點(diǎn)
  • 每個(gè) HTML 屬性是屬性節(jié)點(diǎn)
  • 注釋是注釋節(jié)點(diǎn)
HTML DOM 節(jié)點(diǎn)樹
)2MK5SCU1~XW2P~7_EOO%4Q.png

通過(guò) HTML DOM嘱腥,樹中的所有節(jié)點(diǎn)均可通過(guò) JavaScript 進(jìn)行訪問(wèn)耕渴。所有 HTML 元素(節(jié)點(diǎn))均可被修改,也可以創(chuàng)建或刪除節(jié)點(diǎn)齿兔。

節(jié)點(diǎn)父橱脸、子和同胞
Paste_Image.png

HTML DOM 示例

<code>
<html>
<head>
<title>DOM 教程</title>
</head>
<body>
<p>Hello world!</p>
</body>
</html>
</code>
上面的 HTML 中:
html節(jié)點(diǎn)沒有父節(jié)點(diǎn);它是根節(jié)點(diǎn)
head 和 <body> 的父節(jié)點(diǎn)是 <html> 節(jié)點(diǎn)
文本節(jié)點(diǎn) "Hello world!" 的父節(jié)點(diǎn)是 p節(jié)點(diǎn)
html 節(jié)點(diǎn)擁有兩個(gè)子節(jié)點(diǎn):<head> 和 <body>
head節(jié)點(diǎn)擁有一個(gè)子節(jié)點(diǎn):<title> 節(jié)點(diǎn)
title 節(jié)點(diǎn)也擁有一個(gè)子節(jié)點(diǎn):文本節(jié)點(diǎn) "DOM 教程"
head 元素是 <html> 元素的首個(gè)子節(jié)點(diǎn)
body 元素是 <html> 元素的最后一個(gè)子節(jié)點(diǎn)
p 元素是 <body> 元素的最后一個(gè)子節(jié)點(diǎn)

HTML DOM方法

方法是我們可以在節(jié)點(diǎn)(HTML 元素)上執(zhí)行的動(dòng)作分苇。

HTML DOM 對(duì)象 - 方法和屬性:

一些常用的 HTML DOM 方法:

  • getElementById(id) - 獲取帶有指定 id 的節(jié)點(diǎn)(元素)
  • appendChild(node) - 插入新的子節(jié)點(diǎn)(元素)
  • removeChild(node) - 刪除子節(jié)點(diǎn)(元素)

一些常用的 HTML DOM 屬性:

  • innerHTML - 節(jié)點(diǎn)(元素)的文本值
  • parentNode - 節(jié)點(diǎn)(元素)的父節(jié)點(diǎn)
  • childNodes - 節(jié)點(diǎn)(元素)的子節(jié)點(diǎn)
  • attributes - 節(jié)點(diǎn)(元素)的屬性節(jié)點(diǎn)
1.png

HTML DOM屬性

屬性是節(jié)點(diǎn)(HTML 元素)的值添诉,您能夠獲取或設(shè)置。

innerHTML屬性

獲取或替換HTML元素的值

nodeName屬性

規(guī)定節(jié)點(diǎn)的名稱

  • nodeName 是只讀的
  • 元素節(jié)點(diǎn)的 nodeName 與標(biāo)簽名相同
  • 屬性節(jié)點(diǎn)的 nodeName 與屬性名相同
  • 文本節(jié)點(diǎn)的 nodeName 始終是 #text
  • 文檔節(jié)點(diǎn)的 nodeName 始終是 #document
nodeValue屬性

規(guī)定節(jié)點(diǎn)的值

  • 元素節(jié)點(diǎn)的 nodeValue值為unfined或者null
  • 文本節(jié)點(diǎn)的 nodeValue 是文本本身
  • 屬性節(jié)點(diǎn)的 nodeValue 是屬性值
nodeType屬性

返回節(jié)點(diǎn)的類型医寿,nodeType是只讀的

2.png

HTML DOM 訪問(wèn)

訪問(wèn) HTML DOM - 查找 HTML 元素栏赴。

訪問(wèn)HTML元素

訪問(wèn) HTML 元素等同于訪問(wèn)節(jié)點(diǎn)

  • 通過(guò)使用 getElementById() 方法
  • 通過(guò)使用 getElementsByTagName() 方法
  • 通過(guò)使用 getElementsByClassName() 方法
getElementByld()方法

返回帶有指定ID的元素
<code>
document.getElementByld("intro");
</code>

getElementByTagName()方法

返回帶有指定標(biāo)簽名的所有元素
<code>
x = document.getElementByTagName("p");
document.write(x[0].innerHTML);
</code>

getElementsByClassName()方法

查找?guī)в邢嗤惷乃蠬TML元素
<code>document.getElementsByClassName("intro");</code>

HTML DOM 修改

修改 HTML = 改變?cè)亍傩跃钢取邮胶褪录?/p>

修改HTML元素
  • 改變 HTML 內(nèi)容
  • 改變 CSS 樣式
  • 改變 HTML 屬性
  • 創(chuàng)建新的 HTML 元素
  • 刪除已有的 HTML 元素
  • 改變事件(處理程序)
改變 HTML 內(nèi)容 innerHTML

改變?cè)貎?nèi)容的最簡(jiǎn)答的方法是使用 innerHTML 屬性须眷。
<code>
document.getElementById("p1").innerHTML="New text!";
</code>

改變CSS樣式

訪問(wèn) HTML 元素的樣式對(duì)象
<code>
document.getElementById("p2").style.color="blue";
document.getElementById("p2").style.fontFamily="Arial";
document.getElementById("p2").style.fontSize="larger";
</code>

改變HTML屬性

如需向 HTML DOM 添加新元素乌叶,您首先必須創(chuàng)建該元素(元素節(jié)點(diǎn)),然后把它追加到已有的元素上柒爸。
<code>
var para=document.createElement("p");
var node=document.createTextNode("This is new.");
para.appendChild(node);
var element=document.getElementById("div1");
element.appendChild(para);
</code>

使用事件

當(dāng) HTML 元素”有事情發(fā)生“時(shí)准浴,瀏覽器就會(huì)生成事件:

  • 在元素上點(diǎn)擊
  • 加載頁(yè)面
  • 改變輸入字段

DOM 元素

添加、刪除和替換 HTML 元素捎稚。

創(chuàng)建新的 HTML 元素 - appendChild()

如需向 HTML DOM 添加新元素乐横,您首先必須創(chuàng)建該元素,然后把它追加到已有的元素上今野。
<code>
var para=document.createElement("p"); //創(chuàng)建文本節(jié)點(diǎn)
var node=document.createTextNode("This is new."); //向 p 元素追加文本節(jié)點(diǎn)
para.appendChild(node); //向已有元素追加這個(gè)新元素
</code>

創(chuàng)建新的HTML元素 - insertBefore()

appendChild() 方法葡公,將新元素作為父元素的最后一個(gè)子元素進(jìn)行添加。
如果不希望如此条霜,您可以使用 insertBefore() 方法催什。

刪除已有的元素

如需刪除 HTML 元素,您必須清楚該元素的父元素
<code>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
</code>
當(dāng)想要?jiǎng)h除一個(gè)子元素但是不知道他的父元素的時(shí)候宰睡,可以用parentNode來(lái)查找他的父元素蒲凶。
<code>
var child=document.getElementById("p1");
child.parentNode.removeChild(child);
</code>

替換HTML元素

<code>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
var para=document.createElement("p");
var node=document.createTextNode("This is new.");
para.appendChild(node);
parent.replaceChild(para,child);
</code>

HTML DOM 事件

HTML DOM 允許 JavaScript 對(duì) HTML 事件作出反應(yīng)

對(duì)事件作出反應(yīng)

當(dāng)事件發(fā)生時(shí),可以執(zhí)行 JavaScript拆内,比如當(dāng)用戶點(diǎn)擊一個(gè) HTML 元素時(shí)旋圆。

HTML 事件的例子:
  • 當(dāng)用戶點(diǎn)擊鼠標(biāo)時(shí)
  • 當(dāng)網(wǎng)頁(yè)已加載時(shí)
  • 當(dāng)圖片已加載時(shí)
  • 當(dāng)鼠標(biāo)移動(dòng)到元素上時(shí)
  • 當(dāng)輸入字段被改變時(shí)
  • 當(dāng) HTML 表單被提交時(shí)
  • 當(dāng)用戶觸發(fā)按鍵時(shí)
舉例:當(dāng)鼠標(biāo)點(diǎn)擊文本時(shí)h1的內(nèi)容改變

<code><h1 onclick="this.innerHTML='hello!'">請(qǐng)點(diǎn)擊這段文本!</h1></code>

HTML事件屬性

如需向 HTML 元素分配事件麸恍,可以使用事件屬性

使用 HTML DOM 來(lái)分配事件

HTML DOM 允許使用 JavaScript 向 HTML 元素分配事件
舉例:為 button 元素分配 onclick 事件:
<code><script>
document.getElementById("myBtn").onclick=function(){displayDate()};
</script></code>

onload 和 onunload事件

當(dāng)用戶進(jìn)入或離開頁(yè)面時(shí)灵巧,會(huì)觸發(fā) onload 和 onunload 事件。

  • onload 事件可用于檢查訪客的瀏覽器類型和版本抹沪,以便基于這些信息來(lái)加載不同版本的網(wǎng)頁(yè)刻肄。
  • onload 和 onunload 事件可用于處理 cookies。
onchange事件

onchange 事件常用于輸入字段的驗(yàn)證融欧。

onmouseover 和 onmouseout 事件

onmouseover 和 onmouseout 事件可用于在鼠標(biāo)指針移動(dòng)到或離開元素時(shí)觸發(fā)函數(shù)敏弃。

onmousedown、onmouseup 以及 onclick 事件

onmousedown蹬癌、onmouseup 以及 onclick 事件是鼠標(biāo)點(diǎn)擊的全部過(guò)程权她。首先當(dāng)某個(gè)鼠標(biāo)按鈕被點(diǎn)擊時(shí),觸發(fā) onmousedown 事件逝薪,然后,當(dāng)鼠標(biāo)按鈕被松開時(shí)蝴罪,會(huì)觸發(fā) onmouseup 事件董济,最后,當(dāng)鼠標(biāo)點(diǎn)擊完成時(shí)要门,觸發(fā) onclick 事件虏肾。

HTML DOM導(dǎo)航

通過(guò) HTML DOM廓啊,您能夠使用節(jié)點(diǎn)關(guān)系在節(jié)點(diǎn)樹中導(dǎo)航。

HTML DOM 節(jié)點(diǎn)列表

getElementsByTagName() 方法返回節(jié)點(diǎn)列表封豪。節(jié)點(diǎn)列表是一個(gè)節(jié)點(diǎn)數(shù)組谴轮。

注釋:下標(biāo)號(hào)從 0 開始。
HTML DOM 節(jié)點(diǎn)列表長(zhǎng)度

length 屬性定義節(jié)點(diǎn)列表中節(jié)點(diǎn)的數(shù)量吹埠。

導(dǎo)航節(jié)點(diǎn)關(guān)系

您能夠使用三個(gè)節(jié)點(diǎn)屬性:parentNode第步、firstChild 以及 lastChild ,在文檔結(jié)構(gòu)中進(jìn)行導(dǎo)航

DOM 根節(jié)點(diǎn)

這里有兩個(gè)特殊的屬性缘琅,可以訪問(wèn)全部文檔:
document.documentElement - 全部文檔
document.body - 文檔的主體

childNodes 和 nodeValue

除了 innerHTML 屬性粘都,您也可以使用 childNodes 和 nodeValue 屬性來(lái)獲取元素的內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刷袍,一起剝皮案震驚了整個(gè)濱河市翩隧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呻纹,老刑警劉巖堆生,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雷酪,居然都是意外死亡顽频,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門太闺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)糯景,“玉大人,你說(shuō)我怎么就攤上這事省骂◇盎矗” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵钞澳,是天一觀的道長(zhǎng)怠惶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)轧粟,這世上最難降的妖魔是什么策治? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮兰吟,結(jié)果婚禮上通惫,老公的妹妹穿的比我還像新娘。我一直安慰自己混蔼,他們只是感情好履腋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般遵湖。 火紅的嫁衣襯著肌膚如雪悔政。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天延旧,我揣著相機(jī)與錄音谋国,去河邊找鬼。 笑死迁沫,一個(gè)胖子當(dāng)著我的面吹牛芦瘾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弯洗,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼旅急,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了牡整?” 一聲冷哼從身側(cè)響起藐吮,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逃贝,沒想到半個(gè)月后谣辞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沐扳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年泥从,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沪摄。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躯嫉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杨拐,到底是詐尸還是另有隱情祈餐,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布哄陶,位于F島的核電站帆阳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏屋吨。R本人自食惡果不足惜蜒谤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望至扰。 院中可真熱鬧鳍徽,春花似錦、人聲如沸渊胸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)翎猛。三九已至胖翰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間切厘,已是汗流浹背萨咳。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疫稿,地道東北人培他。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像遗座,于是被迫代替她去往敵國(guó)和親舀凛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 警告請(qǐng)使用 document.write() 僅僅向文檔輸出寫內(nèi)容途蒋。如果在文檔已完成加載后執(zhí)行 document....
    hx永恒之戀閱讀 619評(píng)論 0 10
  • 通過(guò) HTML DOM猛遍,可訪問(wèn) JavaScript HTML 文檔的所有元素。 HTML DOM (文檔對(duì)象模型...
    夜幕小草閱讀 414評(píng)論 0 10
  • 一号坡、JS前言 (1)認(rèn)識(shí)JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu))懊烤,知道了CSS樣式(也稱為表示),會(huì)使用HT...
    凜0_0閱讀 2,752評(píng)論 0 8
  • 本章內(nèi)容 理解包含不同層次節(jié)點(diǎn)的 DOM 使用不同的節(jié)點(diǎn)類型 克服瀏覽器兼容性問(wèn)題及各種陷阱 DOM 是針對(duì) HT...
    悶油瓶小張閱讀 625評(píng)論 0 1
  • 今天早上起床就聽晨讀群的姐妹們讀書宽堆,聲音很優(yōu)美很舒緩腌紧,大家都很努力,相信我們都會(huì)越來(lái)越豐盛畜隶,投射自己抽出時(shí)間靜下心...
    Jane_aad1閱讀 134評(píng)論 1 3