天天看點

JS魔法堂:doctype我們應該了解的基礎知識

一、前言                           

  什麼是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

transitional

frameset

四、doctype的實際用途                    

     那麼不同的dtd會使浏覽器切換到哪種狀态,請參考下圖:

JS魔法堂:doctype我們應該了解的基礎知識

注意:由于在現實使用過程中,發現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了,簡單了吧?

上一篇: html
下一篇: C#、OC遞歸鎖

繼續閱讀