天天看点

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递归锁

继续阅读