1. 程式人生 > >DOM技術

DOM技術

取地址 單片機 實例 動態操作 settime 程序 區分 doc status

DOM概述

DOM:Document Object Model(文檔對象模型)(DOM核心就是 文檔變對象,標簽也變對象,屬性也變對象,反正就是把標記文檔拆散)

用來將標記型對象封裝成對象,並將標記型文檔中的所有內容(標簽,文本,屬性)都封裝成對象。

封裝成對象的目的是為了方便操作這些文檔和文檔中的內容,方便動態(增刪改查)。

文檔:標記型文檔

對象:封裝了屬性和行為的實例

模型:所有標記型文檔都具備的一些共性特征的一個體現

只要是標記型文檔,DOM技術都可以進行操作。

常見的標記型文檔:html xml

DOM這種技術如何對標記型文檔進行操作的?

首先對標記型文檔進行解析。

DOM解析方式

將標記型文檔解析成一個DOM樹,並將樹中的內容封裝成節點對象

在瀏覽器中,DOM解析將按照標簽的層次關系體現出標簽的所屬,形成一個樹狀結構,稱為DOM樹。

DOM解析由瀏覽器自動完成,解析之後,生成一個document對象,並將它加載進內存。

比如下面這個html文檔和相應的DOM樹,整個HTML文檔被封裝成一個document對象。  

<html>
  <head>
    <title>這是演示文檔</title>
  </head>
  <body>
      <div
>div區域</div> <dl> <dt>上層項目</dt> <dd>下層項目</dd> </dl> <table> <tbody> <tr> <th>表頭</th> <td>單元格</td> </
tr> </tbody> </table> <form> <input type="text"/> </form> </body> </html>

DOM樹:

技術分享

樹中的標簽,文本,和屬性稱為節點,也稱為對象。標簽也稱為頁面中的元素。亂

理解:html標簽是靜態的,全是死的,沒有辦法對其中的某個標簽進行操作的,現在通過DOM技術把標簽,文本,屬性全部單個拿出來,那麽文檔就可以對每個元素進行操作

DOM技術把文檔文檔中的元素全變成對象,這樣才能挨個的動態操作。

DOM解析方式的好處:可以對樹中的節點進行任意操作,比如:增刪改查。

        弊端:這種解析方式需要將真個標記型文檔加載進內存,意味著如果標記型文檔的體積很大,浪費較大內存空間。

SAX解析方式

是由一些組織定義的民間常用的解析方式,並不是w3c標準,而DOM是w3c的標準。

SAX解析方式:是基於事件驅動的解析。

這種解析方式,並不將整個文檔一次性讀取,按照每一個標簽進行解析,讀到一個標簽的開頭,相當於處罰一個事件,然後對標簽內容進行解析,然後讀取到結束標簽,這個解析就完成了。

這種解析方式獲取數據速度很快(查),但是不能對標記進行增刪改的動作。根據需求來靈活選擇。

DOM的三級模型

DOM level 1:將html文檔封裝成對象。

DOM level 2:在level 1 基礎上加入新功能,比如解析名稱空間(html標簽中的xmln屬性代表命名空間,這個名字必須唯一,一般用網站的域名來作為命名空間,)

DOM level 3:將xml文檔封裝成對象。

這三種就完成了對常見的標記文檔的解析

DOM是一種底層的技術,各個語言都對外提供了DOM的解析工具,java中的dom4j,jaxp(java內置)

同樣Javascript也有相應的解析工具,在前端中,用Javascript進行解析。

DHTML概述

動態的HTML,不是一門語言,是多項技術綜合體的簡稱

html+css只是一個靜態頁面,加入Javascript和DOM之後,就動起來了。

這四個技術在動態html頁面效果定義時,都屬於什麽角色呢,負責什麽職責呢?

HTML:負責提供標簽,對數據進行封裝,目的是便於對該標簽中的數據進行操作。(用標簽封裝數據)

CSS:負責提供樣式屬性,對標簽中的數據進行樣式的定義。(對數據進行樣式定義)

DOM:負責將標記型文檔以及文檔中的所有內容進行解析,並封裝成對象,在對象中定義了更多的屬性和行為,便於對對象操作。

Javascript:負責提供程序設計語言,對頁面中的對象進行邏輯操作。比如想添加十個節點,就用循環,不然要挨個添加,甚是麻煩!(負責頁面行為,就是頁面動態效果)

綜上所述:Javascript是動態效果的主力編程語言。

DHTML+XMLhttpRequest = AJAX

BOM模型

Browser Object Model(瀏覽器對象模型)

DOM為了方便操作文檔,BOM為了方便操作瀏覽器。

bom中有一些對象,這些對象可以直接在javascript代碼中使用,用來獲取相應的信息。

widow對象

瀏覽器對應的對象就是window對象

註意:只要打開瀏覽器,window對象就在內存中,可以在javascript中直接使用,其實由於window對象是默認存在的,所以window對象可以缺省

appName,history,navigator等屬性。

一些常用方法:

alert();彈窗

confirm();彈出一個是否選擇窗口,根據不同的選擇,該函數返回是或否,通過對該返回值的判定,進而選擇執行不同的操作。(if操作)

focus();獲取焦點。

setTimeout(js語句,毫秒值);超過毫秒值就執行js語句。類似於單片機的中斷?函數返回一個整數,用來區分多個計時,將該值放到clearTimeout中可以取消該計時

setInterval(js語句,毫秒值);每隔毫秒值執行一次。函數返回一個整數,用來區分多個計時,將該值放到clearInterval中可以取消該計時

clearTimeout();

clearInterval();

moveBy(橫坐標偏移量,縱坐標偏移量);當前瀏覽器窗口按照偏移量移動。

moveTo(橫坐標,縱坐標);直接移動到指定坐標點。

open("網址","打開方式","height=100,width=100,status=yes,toolbar=yes,menubar=yes,location=yes");打開方式:新窗口(_blank),有狀態欄,有工具欄,有菜單欄,有地址欄

close();關閉窗口,必須是自己通過代碼新打開的窗口才能通過close來關閉。

常見事件:

直接指向一個函數即可,事件觸發時,就會執行函數。

onload=function(){
    code...  
}

onload:當窗口中的所有動作完成後,立刻觸發,網頁內容加載完後執行。

unbeforeunload:點擊關閉瀏覽器窗口,關閉之前會執行。

onunload:點擊關閉瀏覽器窗口,瀏覽器關閉之後調用。

屬性:

status:屬性中的值就會顯示在狀態欄。

彈窗廣告:

location對象

和java中的url對象類似,location中的屬性可以獲取,也可以賦值,相當於一個變量。

location.protocol:獲取地址欄中的協議

location.href:可以對該變量賦值,這會改變地址欄的值並進行解析,如果解析是http協議,就會對鏈接進行訪問。

location.pathname:路徑名

DOM操作

DOM技術