搬运于:散修杂记
一、 什么是DOM?
1、DOM,文档对象模型(Document Object Model)。
2、DOM是 W3C(万维网联盟)的标准,DOM定义了访问HTML和XML文档的标准。
W3C DOM由以下三部分组成:
- 核心DOM - 针对任何结构化文档的标准模型
- XML DOM - 针对 XML 文档的标准模型
- HTML DOM - 针对 HTML 文档的标准模型
简单的说,DOM是一种理念,一种思想,一个与系统平台和编程语言无关的接口,一种方法使 Web开发人员可以访问HTML元素!记住,它是一种理念,不是具体方法。
二、DOM作用
在W3C的标准中,DOM是独于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。
三、 DOM树的结构

DOM模型将整个文档(XML文档和HTML文档)看成一个树形结构,
在DOM中,HTML文档的层次结构被表示为一个树形结构。并用document对象表示该文档,树的每个子节点表示HTML文档中的不同内容。
每个载入浏览器的 HTML 文档都会成为 Document 对象,Document是探索DOM的入口,利用全局变量document可以访问Document对象
四、DOM的发展-DOM0、DOM1、DOM2、DOM3的区别
DOM0
JavaScript在早期版本中提供了查询和操作Web文档的内容API(如:图像和表单),在JavaScript中定义了定义了’images’、’forms’等,因此我们可以像下这样访问第一张图片或名为“user”的表单:
document.images[0] document.forms['user']
这实际上是未形成标准的试验性质的初级阶段的DOM,现在习惯上被称为DOM0,即:第0级DOM。由于DOM0在W3C进行标准备化之前出现,还处于未形成标准的初期阶段,这时Netscape和Microsoft各自推出自己的第四代浏览器,自此DOM遍开始出各种问题。
DOM0与DHTML
Netscape Navigator 4和IE4分别发布于1997年的6月和10月,这两种浏览器都大幅扩展了DOM,使JavaScript的功能大大增加,而此时也开始出现一个新名词:DHTML。
DHTML是Dynamic HTML(动态HTML)的简称。DHTML并不是一项新技术,而是将HTML、CSS、JavaScript技术组合的一种描述。即:
- 利用HTML把网页标记为各种元素
- 利用CSS设置元素样式及其显示位置
- 利用JavaScript操控页面元素和样式
利用DHTML,看起来可以很容易的控制页面元素,并实现一此原本很复杂的效果(如:通过改变元素位置实现动画)。但事实并非如此,因为没有规范和标准,两种浏览器对相同功能的实现确完全不一样。为了保持程序的兼容性,程序员必须写一些探查代码以检测JavaScript是运行于哪种浏览器之下,并提供与之对应的脚本。JavaScript陷入了前所未有的混乱,DHTML也因此在人们心中留下了很差的印象。
DOM1的出现
在浏览器厂商进行浏览器大站的同时,W3C结合大家的优点推出了一个标准化的DOM,并于1998年10月完成了第一级 DOM,即:DOM1。W3C将DOM定义为一个与平台和编程语言无关的接口,通过这个接口程序和脚本可以动态的访问和修改文档的内容、结构和样式。
DOM1级主要定义了HTML和XML文档的底层结构。在DOM1中,DOM由两个模块组成:DOM Core(DOM核心)和DOM HTML。其中,DOM Core规定了基于XML的文档结构标准,通过这个标准简化了对文档中任意部分的访问和操作。DOM HTML则在DOM核心的基础上加以扩展,添加了针对HTML的对象和方法,如:JavaScript中的Document对象
DOM2与DOM3
在DOM1的基础上DOM2和DOM3引入了更多的交互能力,也支持了更高级的XML特性。DOM2和DOM3将DOM分为更多具有联系的模块。DOM2级在原来DOM的基础上又扩充了鼠标、用户界面事件、范围、遍历等细分模块,而且通过对象接口增加了对CSS的支持。DOM1级中的DOM核心模块也经过扩展开始支持XML命名空间。在DOM2中引入了下列模块,在模块包含了众多新类型和新接口:
- DOM视图(DOM Views):定义了跟踪不同文档视图的接口
- DOM事件(DOM Events):定义了事件和事件处理的接口
- DOM样式(DOM Style):定义了基于CSS为元素应用样式的接口
- DOM遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口
DOM3进一步扩展了DOM,在DOM3中引入了以下模块:
- DOM加载和保存模块(DOM Load and Save):引入了以统一方式加载和保存文档的方法
- DOM验证模块(DOM Validation):定义了验证文档的方法
- DOM核心的扩展(DOM Style):支持XML 1.0规范,涉及XML Infoset、XPath和XML Base
五、什么是BOM?
BOM 是 Browser Object Model,浏览器对象模型。
DOM 是为了操作文档出现的接口,那 BOM 顾名思义其实就是为了控制浏览器的行为而出现的接口。
六、BOM的作用
浏览器可以做什么呢?比如跳转到另一个页面、前进、后退等等,程序还可能需要获取屏幕的大小之类的参数。
所以 BOM 就是为了解决这些事情出现的接口。
七、BOM与DOM的结构层次图

Window对象包含属性:document、location、navigator、screen、history、frames
Document根节点包含子节点:forms、location、anchors、images、links
从window.document已然可以看出,DOM的最根本的对象是BOM的window对象的子对象。
区别:DOM描述了处理网页内容的方法和接口,BOM描述了与浏览器进行交互的方法和接口
八、BOM对象是什么
- BOM:浏览器对象模型(Brower Object Model),是用于操作浏览器而出现的API,BOM对象则是Javascript对BOM接口的实现。
- BOM提供了独立于内容的、可以与浏览器窗口进行交互的对象结构。通过BOM对象可以访问浏览器功能部件和属性。
- BOM对象由多个对象构成,其中代表浏览器窗口的window对象是Javascript顶层对象,其他BOM对象均为window对象的子对象。被作为window对象的属性来引用。
- 其他BOM对象都是在window对象中进行操作。
- BOM对象 是 各个浏览器厂商根据 DOM在各自浏览器上的实现;[表现为不同浏览器定义有差别,实现方式不同]
BOM对象最根本的是window。
九、DOM对象是什么
- DOM:文档对象模型(Document Object Model),是W3C定义的一套用于处理HTML和XML文档内容的标准编程接口API。javascript实现DOM接口的对象对应的是document对象,JS通过该对象来对HTML/XML文档进行增删改查。
- DOM定义了HTML和XML的逻辑结构,将整个页面划分成由层次节点构成的文档,以树的形式来展现。
- 在BOM和DOM结构层次图中,document对象属于window对象,所以DOM也可以看作是BOM的一部分。
DOM对象最根本的是document(实际上是window.document)。
十、DOM与javascript的关系
HTML DOM 独立于平台和编程语言。它可被任何编程语言诸如 Java、JavaScript 和 VBScript 使用。
DOM对象(document),即是我们用javascript实现DOM接口获得的对象。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。
dom是有W3C(万维网联盟)定义的一种规范,这种规范被很多浏览器厂商支持,但是要注意的是他并不是JavaScript语言,虽然他可以在JavaScript中可以被直接使用(主要是将其封装成了JavaScript支持的形式才导致的)。
因此有这样一个近似的等式:
web或XML页面 = DOM +JS(脚本语言)
十一、BOM和DOM 的关系
document是DOM的核心对象,window则是BOM的核心对象,而又有:
console.log(window.document === document); //true
因为document是DOM的根节点,而以上代码又表明:document在window对象中是作为其一个属性而存在的,因此从这个角度来说,BOM包含了DOM。
浏览器提供出来给予访问的是BOM对象,从BOM对象再访问到DOM对象,从而js可以操作浏览器以及浏览器读取到的文档。
与此类似,你还可以验证如下代码:
console.log(window.location === location); //true
console.log(window.navigator === navigator); //true
console.log(window.screen === screen); //true
console.log(window.history === history); //true
console.log(window.window === window); //true
location navigator screen history和window一样,都是BOM提供的对象,只不过它们和document对象一样,都同时以属性的形式存在于window中。
十二、BOM和DOM 的区别
DOM 是为了操作文档出现的 API,DOM对象最根本的是document(实际上是window.document)。
BOM 是为了操作浏览器出现的 API,BOM对象最根本的是window。
BOM是浏览器对象模型,DOM是文档对象模型,前者是对浏览器本身进行操作,而后者是对浏览器(可看成容器)内的内容进行操作

归DOM管的:
E区(就是你说的document啦。由web开发人员呕心沥血写出来的一个文件夹,里面有index.html,CSS和JS什么鬼的,部署在服务器上,我们可以通过浏览器的地址栏输入URL然后回车将这个document加载到本地,浏览,右键查看源代码等。
归BOM管的:
A区(浏览器的标签页,地址栏,搜索栏,书签栏,窗口放大还原关闭按钮,菜单栏等等)
B区(浏览器的右键菜单)
C区(document加载时的状态栏,显示http状态码等)
D区(滚动条scroll bar)
十三、BOM对象大小写的区别



从上面图例中,可以很清楚的看到Window和Document其实是接口,而window、document和location这种才是真正的对象,这些BOM对象就是实现这些BOM接口的实例,而且是单例模式。所以我们不能自己随意创建BOM对象。
十四、BOM和DOM对象的详细介绍
1、window对象 ——BOM核心
- 是BOM对象的核心,JS的顶层对象,浏览器窗口只要打开一个HTML文档,浏览器就会为我们创建一个window对象。它表示整个浏览器窗口,主要用来操作浏览器窗口。
- window对象是JS中的全局对象,可以在任何地方调用, 我们在页面上写的元素,js函数,全局变量都属于window对象,都可以 用window对象来调用.
- 全局变量是 window 对象的属性。
- 全局函数是 window 对象的方法。
- 在使用window对象的属性和方法时,可以用window.属性、window.方法()或者直接属性、方法()的方式调用。就是可以省略window这个前缀。
- 简写案例:window.alert() ,可以直接用alert(),它俩是一个意思. window.document.write(),可以简写成document.write()
2.document对象——DOM核心
- document对象是window的一个属性(BOM包含了DOM)
- window.document对象在编写时可以不使用 window 这个前缀.
- 可以用来处理页面文档,方法很多
- Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
- 示例 :document.getElementById();
3.frame对象
- frames对象是浏览器窗口中的框架对象数组 。
- 除了status,defaultStatus,name属性外,它拥有window对象的全部属性.
- 属性 frames.length存放数组 frames[] 中含有的元素个数。
4.screen对象
- Screen对象是window对象的属性,window.Screen对象在编写时可不使用 window 这个前缀,
- Screen 对象包含有关客户端显示屏幕的信息
- 主要用来获取用户的屏幕信息,并作出优化
height: 获取整个屏幕的高。
width : 获取整个屏幕的宽。
availHeight: 整个屏幕的高减去系统部件的高( 可用的屏幕宽度 )
availWidth : 整个屏幕的宽减去系统部件的宽(可用的屏幕高度 )
5.history对象
- history对象是window对象的属性,window.history对象在编写时可不使用 window 这个前缀。
- History 对象包含用户(在浏览器窗口中)访问过的 URL
- 主要实现前进后退等功能
back() 返回上一页。
forward() 返回下一页。
go(“参数”) -1表示上一页,1表示下一页。
6.navigator对象
- navigator对象是window对象的属性,window.navigator 对象在编写时可不使用 window 这个前缀。
- 包含了一系列浏览器信息的属性 userAgent是最常用的属性,用来完成浏览器判断。
7.location对象
- location对象是window对象的属性,window.location 对象在编写时可不使用 window 这个前缀,
- 用来分析和设置页面的URL地址
- Location 对象存储在 Window 对象的 Location 属性中,表示那个窗口中当前显示的文档的 Web 地址。它的 href 属性存放的是文档的完整 URL,其他属性则分别描述了 URL 的各个部分。
- 常用于对URL进行访问。
一些例子:
location.herf = ‘url地址’
location.hostname 返回 web 主机的域名
location.pathname 返回当前页面的路径和文件名
location.port 返回 web 主机的端口 (80 或 443)
location.portocol 返回页面使用的web协议。 http:或https:
DOM基本操作思维导图

window对象思维导图

总结:Bom对象的核心对象是window,window包含了documen对象
