文章出處

一、前言                           

  什么是doctype?其實我們一直使用,卻很少停下來看清楚它到底是什么,對網頁有什么作用。本篇將和大家一起探討那個默默無聞的doctype吧!

 

二、什么是doctype                      

  doctype或DTD就是聲明在文檔首行,位于<html>前,用于告知瀏覽器該文檔遵循那種級別的HTML或XHTML規范。

  其聲明格式如下:

    <!DOCTYPE html PUBLIC "公共標識符" "系統標識符"[<!ELEMENT name (#PCDATA)>]>

     ①. dotype固定的起始部分

     ②. 聲明文檔以html標簽為根標簽

     ③. PUBLIC用于表示第四部分是公共標識符

     ④. 公共標識符

     ⑤. 系統標識符

     ⑥. 內部子集,html不常見,一般出現在XML中

 

三、doctype的種類                            

   doctype有三種類型(Strict、Transitional和Frameset)。Strict是最為嚴格的類型,要求文檔內容做到樣式與數據完全分離,html標簽中不允許使用任何表現層屬性(如width等);Transitional為非常寬松的DTD,允許你繼續使用HTML4.01的標簽,并且數據和樣式無需完全分離;Frameset表文檔會用到框架。

  以XHTML為例:

  Strict

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  Transitional

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  Frameset

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

 

四、doctype的實際用途                    

  除了上述用途外,doctype還有一個十分重要的用途,那就是觸發文檔模式的切換了。W3C規定在沒有有效的doctype時,瀏覽器將以怪異模式解析、渲染文檔,否則就采用標準模式處理文檔。當然具體情況并沒有那么簡單,具體可以請看《JS魔法堂:瀏覽器模式和文檔模式怎樣玩?》

     那么不同的DTD會使瀏覽器切換到哪種狀態,請參考下圖:

  注意:由于在現實使用過程中,發現doctype最大的作用就是用于文檔模式的切換,于是HTML5規范將doctype的聲明格式簡化為<!DOCTYPE html>,因此以后我們直接寫這個簡化版就好了。(“理論指導實踐,實踐驗證真理”被再一次驗證了)

 

五、DocumentType類型                           

  IE9+、FF、Chrome和Safari均支持DocumentType類型,因此我們可以通過document.doctype獲取DocumentType類型的DTD對象。若文檔沒有聲明DTD,則返回null。

  5.1. 獲取方式

    除了通過document.doctype獲取外,還可以通過document.childNodes[0]來獲取。

  5.2. 特點

    不能動態CUD,僅僅能通過該API獲取DTD信息而已。

  5.3. 屬性值

   nodeType:10

     nodeName:文檔類型的名稱(就是<!DOCTYPE 文檔類型的名稱>)

     nodeValue:null

   parentNode:HTMLDocument類型的元素對象(即是document)

   parentElement:null

     childNodes:空的NodeList

     children:undefined

     name:和nodeName一樣

     entities:描述實體,恒返回null(IE9+有該屬性,而Chrome、FF直接刪除該屬性)

     notations:描述符號,恒返回null(IE9+有該屬性,而Chrome、FF直接刪除該屬性)

     

  5.4. DOM2、DOM3新增的屬性

  publicId:獲取公共標識

  systemId:獲取系統標識

  internalSubset:獲取內部子集

 

  5.5. IE5678下的DTD節點的解析

  由于IE5678沒有DocumentType類型,因此document.doctype恒返回null。而通過document.childNodes[0]返回的是以注釋類型來解析DTD。

 

六、總結                                  

   看了這么多,其實只需在以后開發的時候記得在文檔首行加上<!DOCTYPE html>就OK了,簡單了吧?

 

七、參考資料,感謝你們!                         

  正確使用DOCTYPE:http://www.cnblogs.com/shishm/archive/2012/02/29/2373080.html

  Activating Browser Modes with Doctype:https://hsivonen.fi/doctype/(《前端翻譯:Activating Browser Modes with Doctype》

      全棧JavaScript之路(九)了解DocumentType類型 http://blog.csdn.net/liveinjs/article/details/36624691

  尊重原創,轉載請注明來自:http://www.cnblogs.com/fsjohnhuang/p/3821463.html ^_^肥仔John

  


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()