1. 程式人生 > >DOM基礎知識(概念、節點樹、事件、Document)

DOM基礎知識(概念、節點樹、事件、Document)

接口 鼠標事件 所有 orm selector 設置 部分 子節點 var

1、 DOM概念

全稱為 Document Object Model,譯為文檔對象模型

D:文檔 - DOM將HTML頁面解析為一個文檔 —> document對象

O:對象 - DOM將HTML頁面中內容解析為對應的對象

M:模型 - DOM中對象之間的關系(節點樹結構)

DOM的級別:0 級別:不是W3C的規範; 1、2、3級是W3C規範

l W3C對DOM的定義

DOM是一個獨立於任何語言和平臺的接口,允許任何語言或腳本動態地訪問和更新HTML文檔的內容、結構和樣式。該HTML頁面可以進一步處理,並且該處理的結果可以被合並到所呈現的HTML頁面中。

l DOM的組成部分

DOM CORE; DOM HTML; DOM CSS; DOM XML;

2DOM節點樹

2 DOM樹結構

將HTML頁面解析為一個樹形結構

技術分享圖片

l 節點:

概念:樹結構中每個連接的地方(元素、屬性和文本)

(1)文檔節點---表示整個HTML 頁面(相當於document 對象)

(2)元素節點---表示HTML頁面中的標簽(即HTML頁面的結構)

(3)屬性節點:

(4)文本節點---表示HTML頁面中的標簽所包含的文本內容。

l 判斷節點類型:

技術分享圖片

3、事件

概念:HTML頁面或者瀏覽器窗口發生的一些交互瞬間

分類:鍵盤事件

鍵盤事件表示當用戶操作鍵盤時發生。

onkeydown 用戶按下一個按鍵; onkeyup 用戶松開一個按鍵

onkeypress 鍵盤的按鍵按了一下( keydown + keyup 的組合)

oninput 輸入事件

event事件對象提供哪些獲取到有關鍵盤的屬性

charCore 得到對應鍵盤的值-97

keyCode 得到對應鍵盤的值-97

which 得到對應鍵盤的值-97

註:三個event事件對象的屬性,IE8及以下版本均不支持

key 得到對應鍵盤的值-a

鼠標事件

click 用戶單擊鼠標按鍵; dblclick 用戶雙擊鼠標按鍵

mousedown 用戶按下鼠標按鍵; mouseup 用戶松開鼠標按鍵

mouseover 用戶將鼠標移到指定標簽上; mousemove 用戶移動鼠標

mouseout 用戶將鼠標從指定標簽上移開

  • ? 事件的執行流程:

技術分享圖片

獲取 HTML 頁面中指定的標簽;為指定標簽綁定指定事件;編寫事件發生時的邏輯代碼。

var 名稱 = document.getElementById(‘id的名稱‘);

名稱.onclick=function( ){內容輸出}

  • ? HTML文檔的加載:

想要在head裏面運行script 需要head中script添加window.onload = function( ){ }

4Document對象

document對象作為DOM解析HTML頁面的入口

u DOM查詢

2 優點:速度快,性能好; 缺點:單操作麻煩

getElementById( ):通過元素的id屬性查找

註: 元素的id屬性值必須是唯一的; 通過該方法獲取的元素只能是唯一的

getElementsByName( ):通過元素的name屬性查找

註: 元素的name屬性不唯一,可能多個元素相同name屬性; 通過該方法獲取的元素可能是一個,也可能是多個。結構非常類似於數組的結構,但並不是一個數組。

結果類型—> NodeList(節點集合);類似於數組結構的對象—>類數組對象

getElementsByTagName( ) :通過元素的標簽名查找

getElementsByClassName( ):通過元素class屬性查找(新增方法,IE 8及以下瀏覽器不可

解決兼容性問題 -自定義函數

function getElementsByClassName(element,className){

if(document.getElementsByClassName){

}else{

}

}

2 優點:操作方便; 缺點:速度慢,性能差

querySelector( ) - 利用CSS選擇器的用法

作用:返回與css選擇器匹配的第一個元素

querySelectorAll( ) - 利用CSS選擇器的用法

作用:返回與css選擇器匹配的所有元素

u NodeList類型

技術分享圖片

  • 動態NodeList

含義 - 獲取的集合隨著頁面的變化而變化; 特點 - 執行速度快,耗時短

方法:getElementsByName( ) getElementsByTagName( ) getElementsByClassName( )

  • 靜態NodeList

含義 - 獲取的集合不會隨著頁面而變化; 特點 - 執行速度慢,耗時長

方法 - querySelectorAll()

u 創建節點:

2 元素節點 - createElement(‘標簽名‘)

2 屬性節點 - createAttribute(‘屬性名‘)

步驟: [創建屬性節點時,只能定義屬性名,而不能定義屬性值]

1. 創建屬性節點: var attr = createAttribute(屬性名)

2. 設置屬性節點的值: attr.nodeValue = value;

3. 添加屬性節點: A.setAttributeNode(B) 將B添加到A 上

註:屬性節點不是一個子節點,不可用 ( A)appendChild(B )

2 文本節點 - createTextNode(文本內容)

  • ? document對象屬性(獲取元素):

documentElement屬性:獲取頁面中<html>; 即document. documentElement

head屬性:獲取頁面中<head> ; 即document. head

body屬性:獲取頁面中<body>; 即document. body

forms屬性:獲取HTML頁面中所有的表單元素 即document. forms

images屬性:獲取HTML頁面的圖片元素 即document. images

DOM基礎知識(概念、節點樹、事件、Document)