javascript DOM,它究竟是什麼-------Day32

來源:互聯網
上載者:User

這一晚上看的我是頭疼不已啊,為什麼呢?

終究是半路出家,我對javascript的理解只停留在:調用javascript,改變頁面樣式,元素和實現一些事件的響應,雖然需要的時候可能會用,但是究竟使用的原理卻不是很明白,至於DOM,這麼專業的詞彙,還是省省吧。

不過一晚上也不是毫無收穫,先記錄下暫時自己的理解,可能存在偏差,隨著之後應用的增多慢慢理解吧,先烙個印再說。


1、DOM它是什嗎?

最直接的回答:“Document Object Model”的縮寫,簡稱“文件物件模型”,聽到這樣的回答真是讓人抓狂啊,但是,不得不說它是正確的。

最專業的回答:W3C對DOM的定義是-----它 是中立於平台和語言的介面,程式和指令碼可以通過這個介面動態訪問和修改文檔的內容、結構和樣式。

最簡練的回答:一種API,應用編程介面

毫無疑問,上面的回答都是正確的,而且我們還能提煉出幾個要點:1、一種應用介面;2、對文檔的操作,在我看來,這大抵就是它的核心了,這樣我們來試著通俗的解釋下,看看能不能更簡單、更直觀的瞭解這種概念

在上一篇文章中,提到了javascript可以分成三部分:ECMAscript、DOM、BOM,然後又簡單描述了下ECMAscript:定義了變數來存不同資料類型的值,定義了運算子來對值進行操作,將值的改變和運算子的操作過程合成語句,或者用語句拼接一些完整的方法等等,但是就這樣擺著,方法是有了,可沒見過說明書可以自己操作機器的,我們要想真正實現動態化和互動性,就必須將他們整合,而這種將html(或者html5)、css和javascript凝聚在一起的就是DOM。

這樣我們再來回味上面的三種回答,它是將文檔內事物都整合起來作為一個大的對象進行操作的;至於改變文檔內的內容,javascript則是來訪問這個文檔的入口,而舉個不恰當的例子,桌上一桌豐盛的菜,你最需要的是什麼,是一套餐具,人用餐具吃飯,這已經成了一個標準,不管你吃的是那個菜,不管是你在吃還是他在吃,手扒的倒是可以排除在外,而javascript就是那個媒介,那個通道....


2、DOM是如何進行改變的?

這個總是各個介紹中大篇幅闡述的,看的多了,理解的也就容易些,這樣我們先來看看這幅神圖:


嗯,就是這樣,DOM將整個文檔打散,分成一個模組一個模組的散件,裡面的任意一個事物你都可以單獨將它取出來,這就是它的策略,分而治之。

這樣來讓我們看看,它把他都分成了什麼:(還記得什麼是網頁麼,html標籤 + 文本)

* 文檔節點 :這就是整個文檔,就是一個網頁

* 元素節點 : html標籤 

* 文本節點 :文本

* 屬性節點 :html標籤的屬性

* 注釋節點 :注釋都是一類,分的果然很細,不放過一條活魚的樣子

至於根節點、父節點、子節點和同胞的區別,就不詳說了,這個社會,誰還能分不清誰是誰啊。

3、DOM的初印象

你對DOM的初印象是什麼,我不知道,我的初印象是對事件的響應,既然是實現動態,能夠互動,就必須要能監聽事件,或者滑鼠的,或者鍵盤的,這就是我最初的概念,當然這很片面,但是這一點會你是始終忘不掉的,簡單想想會有哪些事件需要監聽呢:

* onclick/onmouseover/onblur/甚至單擊、雙擊、右鍵、長按的滑鼠操作,足夠單獨整理一篇的

* 監聽鍵盤(不同按鍵對應的編碼,難道真的要背麼..)

* 其實還有一個是對頁面改變的監聽,window.onload/onchange/等等

4、DOM的增刪改查

碰到資料處理,慣性的就是考慮增刪改查,不得不說,這應該算的上一個好習慣。我們最常見、使用頻率最高的應該是查和改。

查的方法通常有三種:getElementById、getElementByTagName、getElementByNames,因為id的唯一性,通過id來定位查詢是最快最常用的,而後兩種則是擷取集合類型,批量擷取的好方法,tagname用來擷取相同標籤的同類元素,而classname則可以自由定義,更便於特選部分,而非全部,當然classname還存在它最大的問題就是相容性,萬惡的ie。

而改的就 更簡單了,在前面曾經做過的更改頁面背景顏色,甚至改變引入樣式,改變標籤內容等,都是DOM的改,它主要包括如下幾個方面:1、改變html內容;2、改變CSS樣式;3、改變html屬性;4、改變事件(處理常式)

而增和刪就是近期才掌握學習的,createElement(“div”)是不是很熟悉,是的,我們已經用過很多次了,當然節點還不只這一種,我們還可以變通,只要不要忘記最後的appendChild(),而刪就更容易理解了,在哪就從哪裡剔除掉,removeChild(),“縣官不如現管”在這裡體現的淋漓盡致,當然前面的改也可以通過replaceChild來整體修改,就不再多說了。

這裡其實有個最明顯,最常用,而我們卻很少去思考的一個最鮮活的例子,我們來分析下,加深下印象:

<script type="text/javascript">function show(){alert("haha");}</script>

是不是非常的熟悉,沒辦法,生活就是這樣,總在不經意間讓你感覺到無盡的智慧。我們來寫一下它的DOM代碼

var script = document.createElement("script");script.type = "text/javascript";script.text = "function show(){alert('haha');}";document.body.appendChild(script);
這樣的話<script type="text/javascript" src=""></script>你知道怎麼寫了麼

5、如何加快DOM的運行速度

其實我現在寫這個有點牽強,因為我沒有實際應用測試過,但是感覺是有道理的,就在這裡一塊說下:

首先,為什麼會存在DOM的運行速度問題?

DOM的修改會嚴重影響網頁的使用者介面,需要重新繪製頁面,也就說需要瀏覽器進行重新解析,而為了確保執行效果的準確性,所有修改操作是按順序同步執行的,也就是所說的“迴流”,因為需要重新從頭執行,所以效能上肯定要收到影響。我們無法改變這種現狀,只能有意有效去減少它的負擔,避免更能多的影響因素。

然後,我們來看看,那些操作可以呢?

1、通過類名切換來修改DOM

document.getElementById("").style.color=cyan;

document.getElementById("").style.width=100px;每一個改變都要進行重析,需要運行兩次

我們完全可以寫成.cc{style:cyan;width:100px;}

document.getElementById("").classname=cc;這裡只需要運行一次即可

2、一次性DOM元素產生

var e=document.createElement("");

body.appendChild(e);

e.innerHTML="haha";---兩次重析

而我們可以去做的只是將二三句進行顛倒即可

var e=document.createElement("");

e.innerHTML="haha";

body.appendChild(e);--一次即可

3、還有個就是文檔片段記錄

function show(element){

var a;

for(var i=0;i<10;i++){

var e=document.createElement("");

e.innerHTML="haha";

body.appendChild(e)

}

};----這可是一個浩大的工程,需要10次重析

而我們通過文檔片段記錄,則有效減短了時間

function show(element){

var a,f=document.createDocumentFragment();

for(var i=0;i<10;i++){

var e=document.createElement("");

e.innerHTML="haha";

f.appendChild(e);

}

body.appendChild(f);

}


我理解的DOM,暫時是這樣一個架構,接下來還需要看BOM,畢竟這三部分是一個整體,整合起來看的話會有不小的驚喜吧,今天就先到這裡了,啊,又晚了,睡覺



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.