html - 什么是DOM? (总结和重要性)

标签 html object dom model document

什么是文档对象模型 (DOM)?

我问这个问题是因为我主要从事 .NET 工作,经验有限,但我经常听到更有经验的开发人员谈论/提及它。我在线阅读了教程,但无法理解全貌。我知道这是一个 API!

更具体的问题是:

  1. 它目前在哪里使用?
  2. 哪些领域的开发人员使用它(前 .NET 开发人员)?
  3. 对于所有开发者来说,理解它的相关性有多大?

最佳答案

一般来说,DOM 是结构化文档的模型。
它是当今 IT 的核心概念,没有开发人员可以选择退出 DOM。无论是在 .net、HTML、XML 还是其他使用它的领域。
它适用于所有文档(word 文档、HTML 页面、XML 文件等)。在开发人员领域,它主要适用于 HTML 和 XML 领域,含义略有不同。

HTML

在 HTML 领域,引入 DOM 是为了支持 90 年代后期称为“动态 HTML”的革命。在 IE4 和 Netscape 4.0 之前,HTML 文档在浏览器中是不可更改的(在这些遥远的时代,你用来制作网页的所有东西都是“动画 GIF”!!!! 而 HTML 是 3.2 版)。
因此,在浏览器内部动态操作服务器发送的文档是一场巨大的革命,并开启了向我们今天看到的有吸引力的网站迈进的步伐。

Javascript 由 Netscape 引入(受洗的 javascript 以顺应新的 Java 趋势,但不相关)并得到 Netscape HTTP 服务器和 Netscape 浏览器的支持,Internet Explorer 热切地跟随浏览器内部的移动。但是,当使用 javascript 来操作文档的内容时,您需要一种简单的方法来指定要与之交互的文档部分。这就是 DOM 的用武之地。虽然 HTML 4 不是“格式良好”的,但浏览器构建了页面的内部表示,在其顶部有“body”元素,下面有大量的 html 标签,在层次结构中(子节点,父节点)节点属性等)。 DOM 是支撑允许导航此层次结构的 API 的模型。

由于 Netscape 和 IE 浏览器都是相互竞争的解决方案,因此 NS 和 IE DOM 融合的可能性很小。 W3C 介入,允许较小的浏览器供应商参与竞争,并努力使 DOM 标准化。因此,W3C DOM。它所做的只是引入另一种方言,众所周知,它花了数年时间和两个强大的竞争对手才迫使 MS 遵守标准。

尽管更现代的导航技术(如 JQuery)对 DOM 有速记符号,但它们在内部依赖于 DOM。

XML

HTML 对文档的“格式良好”表现出宽容的缺点显而易见,这引发了新的热潮:XML。在网络领域,XML 和 XSLT 最先得到 IE5 的支持,并在更多领域被采用,而不仅仅是显示页面。
要解析 XML,主要是在 Java Word 中,您需要开发一个 SAX 解析器,它基本上是 SAX 引擎的一个插件,您可以在其中描述引擎应该如何处理它将在解析文档。开发 SAX 解析器并不简单,但它是一种低占用空间的解决方案。
但是,您必须为每种新文档类型开发一个特定的文档类型...
因此,不久之后图书馆开始出现,可以解析任何文档并构建其层次结构的内存映射。因为它也有相同的根、父子和子概念(通过 HTML 从 SGML 继承),所以它也被称为 DOM,并且这个名称适用于任何库。

其他领域

DOM 的概念并不局限于甚至是为 HTML 或 XML 而发明的。 DOM 是适用于任何文档的一般概念,尤其是那些(其中绝大多数)显示您需要在其中导航的层次结构的文档。您可以谈论 MS-Word 文档的 DOM,也有用于导航这些文档的 API。

关于html - 什么是DOM? (总结和重要性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976344/

相关文章:

javascript - 如何使对象的名称动态化

javascript - 当我将子项从一个父项移动/复制到另一个父项时,如何重新计算显示?

javascript - 获取插入的DOMNode

html - 使 flex 行拉伸(stretch)到单元格中内容的高度 - 内容从容器 DIV 中渗出

javascript - Google 可视化 Barformat 选项

html - css float 在顶部获得双边距(不是来自 body )

Java 在给定类数组时重载 toString() 方法

javascript - 基于单独的对象将数组映射到具有深度的对象

javascript - Highcharts - 使用选定的饼图切片获得 3d 效果

java - 使用 Spring Security 处理远程身份验证