什么是DOM ,by Fadeoc Khaos(非原創(chuàng))

作者:Fadeoc Khaos

鏈接:https://www.zhihu.com/question/34219998/answer/58211568

來源:知乎

著作權(quán)歸作者所有廷痘,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)侦啸。

1 什么是 DOM

你可以把 DOM 看成節(jié)點

上圖是一個 html 文件,也就是網(wǎng)頁的結(jié)構(gòu)。

html 標(biāo)簽是一個節(jié)點(Node)佳遂。

head、title、body、p 標(biāo)簽都是節(jié)點至非。

嵌套其他節(jié)點的節(jié)點叫做父節(jié)點。

被嵌套的節(jié)點叫做子節(jié)點糠聪。

同一個父節(jié)點下的節(jié)點叫做兄弟節(jié)點荒椭。

父親的父親以及上溯十八代祖宗叫做祖先節(jié)點。

兒子的兒子以及子子孫孫無窮匱也叫做后代節(jié)點舰蟆。

2 DOM 有什么用

通過 DOM 你可以改變網(wǎng)頁趣惠。

你可以使用 Javascript 語言來操作 DOM 以改變網(wǎng)頁。

為了改變網(wǎng)頁身害,你必須告訴 Javascript 改變哪一個節(jié)點味悄。這就是操作 DOM。

比如:

<img src="https://pic3.zhimg.com/68e595aab9f7119ebc8db7d346f87ec2_b.jpg" data-rawwidth="818" data-rawheight="575" class="origin_image zh-lightbox-thumb" width="818" data-original="https://pic3.zhimg.com/68e595aab9f7119ebc8db7d346f87ec2_r.jpg">在一個網(wǎng)頁中按下 F12塌鸯,你的瀏覽器會打開控制臺(Console)侍瑟,你輸入

在一個網(wǎng)頁中按下 F12,你的瀏覽器會打開控制臺(Console)界赔,你輸入

varx=document.querySelector("p");alert(x);

第一行就是使用 Javascript 訪問 document 節(jié)點丢习,然后訪問節(jié)點中的第一個 P 節(jié)點,將這個節(jié)點傳遞給變量 x淮悼。等一下咐低?什么是 document 節(jié)點? Html 文件里沒這個標(biāo)簽巴嘈取见擦?整個 Html 文件就是 document 節(jié)點。

第二行通過 alert(x) 使瀏覽器彈出上面紅圈內(nèi)的內(nèi)容羹令,提示 x 是一個 html段落對象鲤屡,p 就是段落,p 的類型就是對象福侈。

如果你再輸入

x.innerHTML = "第一次成功的改變了DOM"

就會改變 P 內(nèi)的內(nèi)容酒来。

如果你為以上內(nèi)容綁定一個鼠標(biāo)動作(事件),比如 onclick (鼠標(biāo)點擊事件):

varx=document.querySelector("p");x.onclick=function(){x.innerHTML="第一次成功的改變了DOM";}

也就是點擊 P 元素的時候會調(diào)用這個 Javascript 函數(shù)肪凛,將 P 內(nèi)的文字改變堰汉。

既然點擊可以對 DOM 進(jìn)行改變,那么舉一反三伟墙,所有的事件都可以翘鸭,劃過,滾動等等戳葵。

既然點擊可以讓 P 元素有所反饋就乓,那么舉一反三,就可以讓所有的元素都根據(jù)事件進(jìn)行反饋。

當(dāng)你在知乎的搜索欄輸入數(shù)據(jù)時生蚁,Javascript 捕獲到了你的輸入時間噩翠,對服務(wù)器使用異步查詢,動態(tài)顯示搜索結(jié)果守伸。

當(dāng)你向下滑動時绎秒,Javascript 捕獲到了你滑動的距離,根據(jù)距離的大小來判斷是否改變 DOM尼摹,進(jìn)而讓頂部的導(dǎo)航欄跟隨瀏覽器窗口滾動见芹,免得你回頭去找。

當(dāng)你點擊修改按鈕時蠢涝,Javascript 捕獲到了這個按鈕的鼠標(biāo)點擊事件玄呛,反饋了一個可編輯的答案給你。

這回懂了和二?操作 DOM 可以讓你更改網(wǎng)頁的交互方式徘铝。所有網(wǎng)頁的交互都依賴這種 DOM 技術(shù),即使不用 Javascript惯吕,也可以使用其他語言來操作 DOM惕它。DOM 是一顆樹,樹枝和樹葉都做了編號废登,你告訴一個腳本淹魄,一個函數(shù)去尋找哪一個枝干的哪一個葉子,對這個葉子做什么改變堡距。

3 怎么學(xué)習(xí) DOM

練習(xí)甲锡,練習(xí),練習(xí)羽戒。

document.getElementById("wonb")缤沦,訪問 id 為 wonb 的節(jié)點。

document.getElementsByClassName("yesninb")易稠,訪問 class 為 yesninb 的節(jié)點缸废。注意,class 在 DOM 中允許出現(xiàn)多次(廢話這就是 class 存在的意義)驶社,因此哪怕只有一個 class 為 yesninb 的節(jié)點企量,返回的也是一個數(shù)組。

既然是數(shù)組衬吆,如果你將它傳遞給 var y,那么你訪問這唯一的該死的節(jié)點時绳泉,就要使用 y[0]逊抡,而不是 y,因為 y 代表的是數(shù)組而不是它其中的元素。

4 如果你看懂了

你可以隨便搜索一下 DOM冒嫡,結(jié)合自己的 html 文件練習(xí)一下操作常用 DOM 節(jié)點的方式拇勃。

W3C 等入門網(wǎng)站介紹了常用的 DOM 方法。

多做孝凌》脚兀看一個方法,實踐一下蟀架。

5 如果你看不懂

去學(xué) HTML 瓣赂, 以及 Javascript 的前三章。

6 進(jìn)階

Javascript 不能夠真正改變 DOM片拍,它僅僅是改變呈現(xiàn)內(nèi)容煌集,當(dāng)你刷新的時候就會發(fā)現(xiàn)我靠這怎么他媽的什么都還原了。

但是你可以把這些改變傳遞給服務(wù)器捌省,由后端比如 PHP 來進(jìn)行后續(xù)的操作苫纤, PHP 可以改變底層數(shù)據(jù)。

用戶的交互比如彈窗等等根本沒必要讓服務(wù)器也跟著摻和纲缓,why? 因為交互只是暫時的卷拘,用完了,還要變成默認(rèn)的祝高,不需要你保存到服務(wù)器栗弟,只要保證你點擊的時候有反饋就行了。

這就是前端褂策。

HTML 表達(dá)靜態(tài)結(jié)構(gòu)(有哪些元素横腿,每個元素代表什么意義,而不是內(nèi)容)

CSS 呈現(xiàn)美化(元素的顏色斤寂,形狀耿焊,布局)

Javascript 負(fù)責(zé)動態(tài)交互(操作 DOM,使用 Ajax 進(jìn)行異步刷新遍搞,與服務(wù)器交互)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罗侯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子溪猿,更是在濱河造成了極大的恐慌钩杰,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诊县,死亡現(xiàn)場離奇詭異讲弄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)依痊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門避除,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事瓶摆×构洌” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵群井,是天一觀的道長状飞。 經(jīng)常有香客問我,道長书斜,這世上最難降的妖魔是什么诬辈? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮菩佑,結(jié)果婚禮上自晰,老公的妹妹穿的比我還像新娘。我一直安慰自己稍坯,他們只是感情好酬荞,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞧哟,像睡著了一般混巧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勤揩,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天咧党,我揣著相機(jī)與錄音,去河邊找鬼陨亡。 笑死傍衡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的负蠕。 我是一名探鬼主播蛙埂,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遮糖!你這毒婦竟也來了绣的?” 一聲冷哼從身側(cè)響起外邓,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤迹淌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岔擂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赛不,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡惩嘉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了踢故。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片文黎。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡奏路,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臊诊,到底是詐尸還是另有隱情,我是刑警寧澤斜脂,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布抓艳,位于F島的核電站,受9級特大地震影響帚戳,放射性物質(zhì)發(fā)生泄漏玷或。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一片任、第九天 我趴在偏房一處隱蔽的房頂上張望偏友。 院中可真熱鬧,春花似錦对供、人聲如沸位他。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹅髓。三九已至,卻和暖如春京景,著一層夾襖步出監(jiān)牢的瞬間窿冯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工确徙, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留醒串,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓鄙皇,卻偏偏與公主長得像芜赌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子育苟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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