最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【SSD系列】DOM0, DOM1, DOM2, DOM3, DOM4,知多少

    正文概述 掘金(云的世界)   2021-08-14   573

    这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战。

    前言

    关于关于【SSD系列】:
    前端一些有意思的内容,旨在3-10分钟里, 500-1500字,有所获,又不为所累。

    DOM是前端工程师必修技能,DOM到底涵盖多少东西呢?

    DOM Living Standard 这里有最新的DOM标准,不妨收藏一下。

    什么是DOM

    DOM(文档对象模型)是针对 HTML和 XML文档的一个API(应用程序编程接口)。DOM描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。DOM 脱胎于Netscape及微软公司创始的 DHTML(动态 HTML),但现在它已经成为表现和操作页面标记的真正的跨平台、语言中立的方式。

    DOM0

    JavaScript在早期版本中提供了查询和操作Web文档的内容API(如:图像和表单),在JavaScript中定义了定义了'images''forms'等,因此我们可以像下这样访问第一张图片或名为“user”的表单:

    document.images[0]
    document.forms['user']
    

    这实际上是未形成标准的试验性质的初级阶段的DOM,现在习惯上被称为DOM0

    还有我们所熟知的onclick事件,也是与DOM0级的事件。

    DOM0级别的事件优点:

    1. 效率高

    2. 可以被Node.clone克隆

    3. 移除事件非常简单

      container.onclick=null即可

    4. 有点也是缺点,唯一性

    多次复制会被覆盖

    当然其他onxxx事件也是,而我们熟知的addEventListener则属于DOM2级别事件。

    <div id="container" onclick="log1();log2()">点我</div>
    <script>	
    	function log1() {
    		console.log('log1......');
    	}
    	function log2() {
    		console.log('log2......');
    	}
    	
    	// 移除事件
    	container.onclick = null
    	
    </script>
    
    

    DOM1

    大家熟知的Nodedocument, document.createElement都是在DOM1级别定义的。

    更多关于知识,详见Document Object Model (DOM) Level 1 Specification。

    1998年 10月DOM1级规范成为W3C的推荐标准,为基本的文档结构及查询提供了接口,专注于HTML文档和XML文档。

    DOM1中,DOM由两个模块组成:DOM Core(DOM核心)和DOM HTML。其中,DOM Core规定了基于XML的文档结构标准,通过这个标准简化了对文档中任意部分的访问和操作。DOM HTML则在DOM核心的基础上加以扩展,添加了针对HTML的对象和方法,如:JavaScript中的Document对象

    每个节点都有nodeType属性,表示该节点的类型。

    在Node类型上的12个数值常量表示:

    NodeType常量NodeType常量值说明
    Node.ELEMENT_NODE1我们常量的div,san,input等等Node.ATTRIBUTE_NODE2属性。Node.TEXT_NODE3包含按字面解释的纯文本,也可能包含转义后的HTML字符Node.CDATA_SECTION_NODE4CDATA区块Node.ENTITY_REFERENCE_NODE5在 DOM4 规范中被移除Node.ENTITY_NODE6在 DOM4 规范里被移除Node.PROCESSING_INSTRUCTION_NODE7用于XML文档的 ProcessingInstruction (en-US) ,例如 <?xml-stylesheet ... ?> 声明Node.COMMENT_NODE8注释Node.DOCUMENT_NODE9表示整个HTML页面Node.DOCUMENT_TYPE_NODE10文档类型(doctype)信息。Node.DOCUMENT_FRAGMENT_NODE11文档片段。性能优化常用。Node.NOTATION_NODE12在 DOM4 规范中被移除

    DOM2

    我们熟知的·addEventListner, document.body.stylegetElementById这些都是DOM2级别的东西。

    • DOM2级核心(DOMLevel2 Core)

      详情参见 DOM-Level-2-Core Overview , DOM-Level-2-Core 和 DOM-Level-2-Core Changes

      在 1级核心基础上构建,为节点添加了更多方法和属性。

      例如 importNode, createElementNS, createAttributeNS, getElementsByTagNameNS and getElementById等等

    • DOM2级视图(DOM Level2 Views)

      详情参见 DOM-Level-2-Views Overview

      为文档定义了基于样式信息的不同视图。

      我们常用的就是document.defaultView,其返回文档所在的Window

    • DOM2 级事件(DOM Level2 Events)

      详情参见 DOM-Level-2-Events Overview

      说明了如何使用事件与 DOM文档交互。

      我们比较熟悉的就是 addEventListner, 基于EventTarget的整个事件系统都是DOM2定义的。

    • DOM2级样式(DOM Level 2 Style)

      详情参见 DOM-Level-2-Style Overview

      定义了如何以编程方式来访问和改变 CSS 样式信息。

    比如我们常见 CSSStyleDeclaration CSSStyleSheet 这些重要的对象,别说你没用过? document.body.style其返回的就是CSSStyleDeclaration.

    • DOM2级遍历和范围(DOM Level2Traversal and Range)

      ​ 详情参见DOM-Level-2-Traversal-Range Overview

      ​ 引入了遍历 DOM文档和选择其特定部分的新接口。

      比如: createTreeWalkercreateNodeIterator 这两个节点遍历方法,大家可能比较陌生:

    const nodeIterator = document.createNodeIterator(
        document.body,
        NodeFilter.SHOW_ELEMENT,
        {
          acceptNode(node) {
           return node.nodeName.toLowerCase() === 'p' ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
         }
       }
    );
    const pars = [];
    let currentNode;
    
    while (currentNode = nodeIterator.nextNode()) {
      pars.push(currentNode);
    }
    
    • DOM2级HTML(DOMLevel2HTML)

      ​ 详情参见 DOM-Level-2-HTML Overview

      其扩展了 DOM Level 2 Core API [ DOM Level 2 Core ] ,以描述特定于 HTML 文档[ HTML 4.01]和 XHTML 文档[ XHTML 1.0]的对象和方法。

      一般来说,操作层次化文档结构、元素和属性所需的功能将在核心部分中找到; 依赖于 HTML 中定义的特定元素的功能将在本部分中找到。

    HTMLOptionsCollection就是新增的, 你别说不知道,其就是<option>节点的集合。DOMImplementation 接口的 hasFeature可还记得,也是哦。

    DOM3

    详情可参见 DOM-Level-3-Core Overview, DOM-Level-3-Core 和 DOM-Level-3-Core Changes。

    它完成了 DOM 和 XML信息集文档之间的映射,包括对 XML Base [ XML Base ]的支持,增加了向 DOM Nodes 附加用户信息,提供了解析名称空间前缀或操作“ ID”属性的机制等等。

    • DOM加载和保存模块(DOM Load and Save):引入了以统一方式加载和保存文档的方法
    • DOM验证模块(DOM Validation):定义了验证文档的方法
    • DOM核心的扩展(DOM Style):支持XML 1.0规范,涉及XML Infoset、XPath和XML Base

    DOM4

    2015年11月19日, DOM4发布,详情可参见 W3C DOM4。

    DOM4增加了 Mutation Observers ,作为原来 Mutation Events的替代。

    小结

    先提个问题,我们常说的HTML5是 2008年发布的,他应该和DOM几对应你?

    1. onclick 系列是DOM0级别的事件,只能有一个函数,一定条件下可以被复制
    2. addEventListener系列是DOM2级别的事件
    3. XPath 属于DOM3级别的东西,平时并不常见,其也可用于遍历节点。
    4. DOM4,增加了观察节点变化的能力。

    综上可见,DOM1, DOM2是核心,其余的我们使用并不多。

    写在最后

    不忘初衷,【SSD系列】,3-5分钟,500-1000字,有所得,而不为所累,如果你觉得不错,你的一赞一评就是我前行的最大动力。

    技术交流群请到 这里来。 或者添加我的微信 dirge-cloud,一起学习。


    起源地下载网 » 【SSD系列】DOM0, DOM1, DOM2, DOM3, DOM4,知多少

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元