1. 程式人生 > >Javascript高級編程學習筆記(36)—— DOM(2)Document

Javascript高級編程學習筆記(36)—— DOM(2)Document

ctype named views 瀏覽器 鼠標 小寫 形式 pen syn

Documet類型

了解了基礎的Node類型過後,我們來聊聊Node中的Document類型

我們知道所有的節點都繼承自Node類型

所以除了Node類型公有的方法和類型之外,Document類型還有一些自己的特性

JS通過Document類型來表示文檔

在瀏覽器中 document 對象是 HTMLDocument 的一個實例(繼承自Document類型)

表示整個 HTML 頁面,且 document 對象是 window 對象的一個屬性所以可以作為全局對象訪問

技術分享圖片

具有以下特征:

1、nodeName:#document

2、nodeValue:null

3、parentNode:null

4、nodeType:9

5、ownerDocument:null

文檔的子節點

DOM標準規定 Document 節點的子節點可以是

1、DocumentType(文檔類型聲明)

2、Element

3、ProcessingInstruction

4、Comment

通過documentElement屬性可以更快地訪問 document 的子節點

該屬性始終指向頁面中的<html>

也可以通過 childNodes 來訪問頁面中的<html>

但是有些時候在 html 之前可能會有註釋節點

技術分享圖片

所以如果需要訪問 <html> 最好還是使用 document.documentElement 來訪問

JS中document 還有個 body 屬性用於訪問 <body> 節點

doctype 屬性用於訪問 <!DOCTYPE html> 也就是文檔類型聲明,但是不同瀏覽器在該屬性上的差異較大,所以不推薦使用

具體差異在:

1、IE8以下始終為null,會將其解析為註釋節點

2、IE8以上若存在,會將其作為document 的第一個子節點

3、在非IE瀏覽器中,該屬性會正確指向文檔聲明,但是不會出現在 childNodes 中

關於註釋節點,不同瀏覽器的解析也存在著較大的差異

所以 <html> 外部的註釋節點作用極為有限

文檔信息

document 作為 HTMLDocument 的實例,document 對象還有一些標準的 Document 對象所沒有的屬性

1、title 指向頁面中的 <title> 內容,通過修改該值可以修改頁面的標題

2、URL 包含頁面完整的 URL地址(即顯示在地址欄中的內容)

3、domain 頁面的域名

4、referrer 來源url 通常為空,只有重定向的頁面有該值

後面三個屬性中只有 domain 可以設置值,但是只能設置為 URL 中包含的域名,也就是子域名

並且還有一個限制,一旦將其設置為子域名就不能再設回父域名,也就是只能設置為當前domain的子域名

查找元素

Dom操作中最基礎,也是最重要的功能就是查找元素了

該操作可以通過 document 對象的幾個方法來完成

Document提供的方法:

1、getElementById() // 傳入元素ID,返回第一次匹配的元素,IE8以下不區分ID的大小寫,IE7以下有個bug 若在 ID元素的前面,有個表單元素的name與ID一致則會返回這個表單元素

2、getElementsByTagName() // 傳入標簽名,返回一個包含(0或多個元素的)NodeList,在HTML文檔中會返回一個 HTMLCollection 對象,可以傳入 * 以獲取全部元素,html不區分大小寫,XML區分

PS、HTMLCollection 和 NodeList 類似,也是一個“動態” 的集合,該集合提供兩個方法用以訪問其中的元素

  1、item()傳入元素索引

  2、namedItem() 通過元素的name特性進行索引

並且如果對 HTMLCollection 使用方括號的方式進行訪問,在後臺仍舊調用的是 item 方法

還有一點需要註意,IE在實現上將註釋節點實現為元素,所以在使用* 獲取所有元素時也會獲取到註釋節點

HTMLDocument提供的方法:

getElementsByName () 查找具有特定name的元素

與getElementByTagName 類似該方法返回一個 HTMLCollection

不過對於結果調用 namedItem 只會返回第一個,因為所有結果的name都是一樣的

特殊集合

document 對象還有一些特殊集合,為訪問文檔的常用部分提供了便利

這些集合都是 HTMLCollection

document.anchors 所有有name的a標簽的集合

document.forms 文檔中的所有 <form>

document.images 文檔中所有的<img>

document.links 文檔中所有有href屬性的a標簽

DOM一致性檢測

由於DOM分為多個級別,所以檢測瀏覽器具體實現了哪些就是一個十分必要的過程

document.implementation屬性為此提供了相應的功能和對象

DOM1中只為其提供了一個方法 hasFeature

該方法需要兩個參數,第一個是需要檢測的功能,第二個參數是該功能的版本號,兩個參數都為字符串串形式

可以檢測的功能有以下值:

1.Core // 基本DOM

2.XML // Core的XML拓展

3.HTML // XML對HTML的拓展

4.Views // 樣式的文檔格式化

5.StyleSheets // 將樣式表關聯到文檔

6.CSS // 對層疊樣式表1級的支持

7.CSS2 // 對層疊樣式表2級支持

8.Events // 常規DOM事件

9.UEvents // 用戶界面事件

10.MouseEvents // 鼠標事件

11.MutationEvents // DOM樹變化時的事件

12.HTMLEvents // HTML4.01的事件

13.Range // 對範圍操作的支持

14.Traversal // 遍歷DOM樹的方法

15.LS // 文件與DOM樹的同步加載與保存

16.LS-Async // 文件與DOM樹之間的異步加載與保存

17.Validation // 確保有效的前提下修改DOM樹的方法

PS.由於這裏的屬性值,由瀏覽器廠商設置,所以很可能不準確,所以需要能力檢測與之配合使用

文檔寫入

document 對象還有一個十分重要的功能,那就是將輸出流寫入到網頁中的能力

提供了4個方法:

1、write 接收一個字符串,將其原樣寫入到網頁中

2、writeln 接收一個字符串,將字符串末尾添加 \n 換行後寫入頁面

3、open 打開網頁輸出流

4、close 關閉網頁輸出流

如果頁面加載完成,那麽輸出的內容將會重寫整個頁面

Javascript高級編程學習筆記(36)—— DOM(2)Document