Dom 概览
前言
我们已经接触并使用了很多api去操作html文档,例如:appendChild,getElementById, 等等。但是,每当我在浏览器输入document,window 按下回车,会发现还有好多api不会使用。感觉自己在一个海洋里,找不到边界,有点茫然失措。
试想其原因,可能是,我一接触js编程时。就会被教着使用getElementById获取一个元素,使用removeChild删除一个元素等等。没有时间去思考事情的宏观,全貌。会完全沉浸在使用这些api的业务逻辑当中。那么解决这个问题,应该从宏观出发,搞清楚我们正在使用的这些api到底是谁,属于谁。 事情原本很简单,我们在面对任何一个新的事物的时候,都会自然的去想,这个东西是干什么的。 你只有知道这个是干什么的,有个整体的映象,在接下来使用的过程中才不会盲人摸象。 上帝说要有光,那么就有了光。 这其实是个很难的问题,上帝为什么知道应该有光,这需要大智慧的。 所以任何规范的制定者都应该受到尊重。 在软件行业里,我们的需求文档就是一个规范。它是来解决应该有什么的问题, 比起实现来,她重要的多的多。DOM就是一个规范
DOM
下定义
Document Object Model 是 HTML,XML.SVG 文档的编程接口规范。它把文档呈现成结构化的树结构。DOM 定义了操作树的方法,以便这些方法能改变树的结构,样式和内容。它把以上的文档类型描述成结构化的节点(Node)和对象(Object),这些节点和对象拥有多样的属性和方法。节点(Nodes)也具备事件处理能力。一旦事件触发,他们对应的节点处理程序将会被执行。实际上,DOM 联系着web 页面和scripts 或者其他的编程语言。
尽管DOM 常常被javascript操作,但并不是JavaScript的一部分,DOM也可以被其他任何编程操作
一个XML文档及其所对应的DOM树,如下:
<?xml version="1.0" encoding="utf-8"?> <bookstore>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year></year>
<price>29.99</price>
</book> <book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year></year>
<price>30.00</price>
</book> <book category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year></year>
<price>39.95</price>
</book> <book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year></year>
<price>49.99</price>
</book> </bookstore>
DOM分类
按照操作对象的不同,可分为Core DOM、XML DOM 和 HTML DOM。 Core Dom:核心Dom,针对任何结构化文档的标准模型。 XML DOM:用于XML文档的标准模型,对XML元素进行操作。 HTML DOM: 用于HTML文档的标准模型,对HTML元素进行操作。
DOM历史版本
W3C标准化组织定义了一系列DOM接口,随着时间的发展,目前包括DOM Level 。每一个新版本是对以前版本的补充和新功能加入。 DOM level :
. core:一组底层的接口,其接口可以表示任何结构化的文档,同时也允许对齐进行扩展,典型的例子是支持xml Dom
. html:一组基于Core 定义的接口的上层接口。主要是为了方便HTML 文档的访问。
DOM level :
. core: 对DOM level 1中core 部分进行扩展,其中著名的就是getElementById ,还有很多跟命名空间(namespace)的接口
. views:允许动态访问和修改文档内容的表示,主要是两个接口AbstractView 和 DocumentView
. Events:主要有EventTarget,MouseEvents接口,但不支持keyboard
. Style(Css):加入可以修改样式属性的接口
. Traversal and range: NodeIterator 和 TreeWalker
. 允许动态访问,修改HTML文档 Dom level :
. core :加入了新的adoptNode() 和textContent支持
. Load And Save: 动态加载和序列化DOM表示
. validation:根据scheme 验证文档的有效性
. Events:keyboard的支持,
. XPath: 是用XPath1.0来访问DOM树,XPath是一种简单直观的检索DOM树节点的方式
Html Dom
我们日常工作的时候,都跟 HTML 文档打交道,其实就是属于 W3C 所规定的 DOM Level HTML 模块内的范畴。HTML DOM 的特性和方法不是标准的 DOM 实现,而是是专门针对 HTML 而设的,同时也考虑到使得 DOM 操作变的更为简便。HTML 模块集中表现在 HTMLElement 接口上,即为全体元素类型的对象所实现的接口。就该文讨论的范围而言,HTMLElement 接口的参与形式与上述的 Node 节点接口非常地相似。一旦引入了 OO 设计观,只要实现了 HTMLElement 接口的对象,就可以定义它为元素了。一份 HTML 文档有相当多的都是元素,当然还有,表示文档本身的 HTMLDocument 和集合容器 HTMLCollection 等等。 因此,要准确理解 DOM HTML 的模块,必须认识其接口是基于元素的(Element-based),而不是基于节点的(Node-based)。那样的话,元素方式与节点方式到底又有什么区别呢(Element v.s Node),应该如何界定两者呢?例如节点属性(properties of elements),当在“基于元素”的语境中,就是“属性(attributes)”,并非独立的节点对象。——尽管按照某个角度讲,元素是节点的一种特例,我们仍可保留“节点”这一说法,一个标签(tag)便是一个 “节点”。假如我们要得到 id 属性的字符串的值是什么,采用DOM Core 的方式就是,
Core or HTML Module?
既然这样,那我应该使用 Core 的 API,还是 HTML 模块的 API?对于 HTML 的文档来说,用 Core 或 HTML Module 实际差别不大。本来我们一直都不太强调这种界定,以致忽略了它们细微的差异。如果我们觉得还是模棱两可的话,我们可进一步查探它们的明细。个人认为处理 XHTML 并使用 Core API 这样更能够说明 XHTML 中的 “X”,即表明这份 HTML 就是一份标准的 XML 文档,以便与原有 HTML 4.1 从语义上区别开来。但请记住,当处理一份 XML 结构的文档的时候,自然而然就是采用 Core 去处理。通过XHMLHttpRequest 请求执行后所返回的 responseXML 结果对象,那只能使用 Core 的 API 去处理分析,就不能够采用 HTML 的了。
W3C 与 WhatWg
他们两个吵架,然后Whatwg赢了。html5诞生了。但是w3c的卓越贡献将永存。
whatwg 的Dom 官网 https://dom.spec.whatwg.org/
搞清楚以上的内容,从头梳理下dom的api。查缺补漏。 资料:https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model
dom core level3 文档 http://www.w3school.com.cn/xmldom/index.asp
Dom 概览的更多相关文章
- 笔记《JavaScript 权威指南》(第6版) 系统理论知识概要
主要内容概要 [JavaScript语言核心]词法结构,类型.值和变量,表达式和运算符,语句,对象,数组,函数,类和模块,正则表达式的模式匹配,JavaScript的子集和扩展,服务器端JavaScr ...
- JavaScript权威指南--脚本化文档
知识要点 脚本化web页面内容是javascript的核心目标. 第13章和14章解释了每一个web浏览器窗口.标签也和框架由一个window对象所示.每个window对象有一个document对象, ...
- 《JavaScript权威指南(第6版)(中文版)》PDF
简介自1996年以来,JavaScript的:权威指南已为JavaScript圣经程序员,程序员指南和全面的参考,以核心语言和客户端JavaScript API的Web浏览器定义.第6版包括HTML5 ...
- DOM中的事件处理概览与原理的全面剖析
事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信,DOM支持大量的事件: 本文通过这几点向大家详细解析事件处理的基本原理:事件类型.事件目标.事件处理程序.事件对象.事件传播 最后再向 ...
- jQuery1.11源码分析(1)-----Sizzle源码概览[原创]
最近在啃jQuery1.11源码,上来就遇到Sizzle这个jQuery的大核心,虽然已经清楚了Sizzle的用途,先绕过去也没事,但明知山有虎偏向虎山行才是我们要做的. 本文面向的阅读对象:正在学习 ...
- (一)DOM 常用操作 —— “查找”节点
在 DOM 树中,如果想要操作一个节点,那么首先要"查找"到这个节点.查找节点的方法由 Document 接口定义,而该接口由 JavaScript 中的 document 对象实 ...
- Angular(01)-- 架构概览
声明 本系列文章内容梳理自以下来源: Angular 官方中文版教程 官方的教程,其实已经很详细且易懂,这里再次梳理的目的在于复习和巩固相关知识点,刚开始接触学习 Angular 的还是建议以官网为主 ...
- node-webkit学习(3)Native UI API概览
node-webkit学习(3)Native UI API概览 文/玄魂 目录 node-webkit学习(3)Native UI API概览 前言 3.1 Native UI api概览 Exte ...
- DOM盒模型和位置 client offset scroll 和滚动的关系
DOM盒模型和位置 client offset scroll 和滚动的关系 概览 在dom里面有几个描述盒子位置信息的值, pading border margin width height clie ...
随机推荐
- bzoj3884 上帝与集合的正确用法
a^b mod P=a^(b mod phi(p)) mod p,利用欧拉公式递归做下去. 代码 #pragma comment(linker,"/STACK:1024000000,1024 ...
- PHP+ExtJS 文件上传示例
xtJS 4 有一个非常方便的文件上传组件,可以用来将文件上传到服务器.本文PHP教程UncleToo将介绍使用PHP和ExtJS实现文件上传功能. 首先,创建文件上传组件Ext.form.Panel ...
- liunx 远程拷贝到本地
此句在本地git bash 执行,就能拷贝远程的目录 scp -r userName@remote:/var/www/views/log/*.* ~/Desktop
- Ubuntu14.04安装OpenCV2.4.9
1.安装依赖 sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev lib ...
- 关于在linux中使用图形界面的网络管理工具
有好几种自动设置的工具可以选择(既然说是自动设置的工具,那就说明有手动设置的工具,例如 使用 ip, iw, iwconfig 这些命令设置网络),例如:Connman, netctl, Networ ...
- MVC中使用EF增删改查,简单的例子
//这个是分页数据和总页数类 public class SummaryBase<TModel> { public SummaryBase(); public IList<TModel ...
- python学习笔记系列----(三)数据结构
这一章主要是介绍了python一些常用的数据结构,比如list,tuple,dictionary,set,以及一些实用遍历技巧,主要讲的还是list. 3.1 list 主要介绍了list的一些常用的 ...
- VMware下centos6.3minimal搭建网络环境
VMware提供3钟连接网络的方式,参看http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/03/15/1985084.html 先确定VMw ...
- 【金】nginx+uwsgi+django+python 应用架构部署
网上有很多这种配置,但就是没一个靠普的,费了好大的力气才完成架构部署.顺便记录一下. 一.部署前的说明 先安装好 python,django,uwsgi,nginx软件后.后配置运行的软件是分先后的. ...
- python装饰器通俗易懂的解释!
1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...