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

2021-09-23 21:43:53 字數 2284 閱讀 3249

一、前言

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

二、什麼是doctype

doctype或dtd就是宣告在文件首行,位於前,用於告知瀏覽器該文件遵循那種級別的html或xhtml規範。

其宣告格式如下:

/p>

①html

②public

③"公共識別符號"

④"系統識別符號"⑤

⑥>

①. dotype固定的起始部分

②. 宣告文件以html標籤為根標籤

③. public用於表示第四部分是公共識別符號

④. 公共識別符號

⑤. 系統識別符號

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

三、doctype的種類

doctype有三種型別(strict、transitional和frameset)。strict是最為嚴格的型別,要求文件內容做到 樣式與資料完全分離,html標籤中不允許使用任何表現層屬性(如width等);transitional為非常寬鬆的dtd,允許你繼續使用 html4.01的標籤,並且資料和樣式無需完全分離;frameset表文件會用到框架。

以xhtml為例:

strict

transitional

frameset

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

注意:由於在現實使用過程中,發現doctype最大的作用就是用於文件模式的切換,於是html5規範將doctype的宣告格式簡化 為,因此以後我們直接寫這個簡化版就好了。(「理論指導實踐,實踐驗證真理」被再一次驗證了)

五、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:文件型別的名稱(就是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。

六、總結

看了這麼多,其實只需在以後開發的時候記得在文件首行加上就ok了,簡單了吧?

CSS魔法堂 那個被我們忽略的outline

在css魔法堂 改變單選框顏色就這麼吹毛求疵!中我們要模擬原生單選框通過tab鍵獲得焦點的效果,這裡涉及到乙個常常被忽略的屬性 outline,由於之前對其印象確實有些模糊,於是本文打算對其進行稍微深入的研究 用於建立可視物件的輪廓 元素的border box 如表單按鈕輪廓等。outline不佔文...

JS魔法堂 再識ASCII實體 符號實體和字元實體

一 前言 相信大家都熟悉通過字元實體 來實現多個連續空格的輸入吧!本文打算對三類html實體及js相關操作作進一步的整理和小結,若有紕漏請大家指正,謝謝。二 初識html實體 由於html中某些字元是預留的 如 和 等 若要在進行html解析出來後能正確顯示預留字元,則需要使用字元實體來代替了。字元...

JS魔法堂 關於元素位置和滑鼠位置的屬性

一 關於滑鼠位置的屬性 1.觸發滑鼠事件的區域 盒子模型中的border,padding,content區域會觸發滑鼠事件,點選margin區域將不觸發滑鼠事件。2.滑鼠事件物件mouseevent下的屬性 注意 1.ie5.5 8不支援該屬性,polyfill方法pagex clientx scr...