js DOM 和 BOM
DOM 和 BOM 详解
1. 什么是 DOM ?
DOM(Document Object Model,文档对象模型),是 W3C 组织推荐的处理可扩展标记语言(HTML或XML)的标准编程接口(API)。它的作用是通过这些 DOM 接口可以改变网页的内容、结构和样式。
在 DOM 模型中,HTML 文档的层次结构被抽象为一个 DOM 树,这个树结构的每一个子节点表示 HTML 文档中的不同内容。
- 【文档】:一个页面就是一个文档。在 DOM 中使用 document 表示。
- 【节点】:位于文档中的每个对象都是某种类型的节点。在一个 HTML 文档中,一个对象可以是一个元素节点,也可以是一个文本节点或属性节点,DOM 中使用 node 表示。
- 【元素】:页面中的所有标签都是元素,
element
类型是基于node
的。它指的是一个元素或一个由 DOM API 的成员返回的element
类型的节点。,DOM 中使用 element 表示。
例如:
DOM 的方法 (methods) 让你可以用特定方式操作这个树,用这些方法你可以改变文档的结构、样式或者内容。同时,元素可以关联上事件处理器,一旦某一事件被触发了,那些事件处理器就会被执行。
2. DOM 树节点操作
文档对象模型 (DOM) - Web API 接口参考 | MDN (mozilla.org)
3. DOM 事件
DOM 事件模型包括:
- 标准事件模型
- IE 事件模型
但 IE 事件模型很少用了,所以这里不再进行叙述。
标准事件模型包括三个阶段:
3.1 事件捕获阶段
事件从 document
⼀直向下传播到⽬标元素, 在这个过程中检查经过的节点是否绑定了该类事件的事件监听函数,如果有就执⾏。
3.2 事件处理阶段
事件到达⽬标元素, 触发⽬标元素的监听函数。
3.3 事件冒泡阶段
事件从⽬标元素冒泡到 document
, 也是检查经过的节点是否绑定了该类事件的事件监听函数,如果有则执⾏。
3.4 事件处理的时机
事件监听(处理)函数一般有两种写法:
- 在 js 中向元素的属性添加,例如:
div.onclick = …
- 在 html 中直接向元素上添加,例如:
<div onclick = “…">
或者,使用 addEventListener
和 removeEventListener
来添加或移除事件监听函数。
而实际上,事件处理函数并不是一定在事件处理阶段被调用,也可以设定在其它阶段!
事件绑定监听函数的方法如下:
1 | addEventListener(eventType, handler, userCapture) |
事件移除监听函数的方式如下:
1 | removeEventListener(eventType, handler, useCapture) |
可以看到,有三个参数:
- 【eventType】 — 事件类型
- 【handler】 — 事件处理函数
- 【useCapture】 —
boolean
类型,用于指定是否在捕获阶段进行处理,一般设置为false
与 IE 浏览器保持一致,即只在事件冒泡阶段才执行事件处理函数!设置为true
就在捕获过程中执行。
3.5 事件对象
在触发 DOM 上的事件时都会产生一个对象。
DOM中的事件对象为 event
,其拥有以下属性:
type
:获取事件类型(click)target
:获取事件目标(object)stopPropagation()
方法:阻止事件冒泡preventDefault()
方法:阻止事件的默认行为
4. 什么是 BOM ?
BOM的核心是 window
对象,而 window
对象又具有双重角色,它既是通过 js 访问浏览器窗口的一个接口,又是一个 Global
(全局)对象。
这意味着在网页中定义的任何对象、变量和函数,都以 window
作为其 global
对象。
下面是一些常用的 window
对象身上的方法:
1 | window.close(); //关闭窗口 |
BOM 中的其它对象为:
- location
- navigator
- screen
- history
- frames
这些对象称为 window
的子对象,是以属性的方式添加到 window 对象身上的。
4.1 document
对象
实际上就是 DOM 中的 document 对象,即 document == window.document
的结果为 true
。它是唯一一个既属于 BOM 又属于 DOM 的对象。
4.2 location
对象
location 对象,表示载入窗口的URL,可用 window.location
直接引用它。
其身上常用的属性和方法如下:
1 | location.href //当前载入页面的完整URL,如http://www.somewhere.com/pictures/index.htm |
4.3 navigator
对象
navigator
对象中包含大量有关 Web 浏览器的信息,在检测浏览器及操作系统上非常有用,也可用 window.navigator
直接引用它。
其身上常用的属性和方法如下:
1 | navigator.appCodeName //浏览器代码名的字符串表示 |
4.4 screen
对象
screen
对象,其用于获取某些关于用户屏幕的信息,同样也可用 window.screen
引用它。
其身上常用的属性和方法如下:
1 | screen.width/height //屏幕的宽度与高度,以像素计 |
5. DOM 和 BOM 区别
那么最后,DOM 和 BOM 的区别在哪呢?它们两者之间有什么联系?
首先来看下面这张图:
可以看到,在层次结构中,DOM 最根本的元素 document
是 BOM 的核心对象 window
的一个子对象。所以,DOM 实际上可以看作 BOM 的一个部分。即上面所说的,document == window.document
的结果为 true
。
而浏览器提供出来给予访问的是 BOM 对象,从 BOM 对象再访问到 DOM 对象,从而在 js 中可以操作浏览器以及浏览器读取到的文档。
只不过,两者的区别在于:
DOM 描述了处理网页内容的方法和接口,BOM 描述了与浏览器进行交互的方法和接口。
总结
最后来总结一下:
DOM 是【文档对象模型】,BOM是【浏览器对象模型】。
DOM 就是把文档当做一个对象来看待,BOM 是把浏览器当做一个对象来看待
DOM 的顶级对象是
document
(实际上是window.document),BOM 的顶级对象是window
DOM 主要规定的是操作页面元素,BOM 规定的是浏览器窗口交互的一些对象
DOM 是 W3C 标准规范,BOM 是浏览器厂商在各自浏览器上定义的,兼容性较差。
- 标题: js DOM 和 BOM
- 作者: 6dianbiqi
- 创建于 : 2024-06-12 09:23:59
- 更新于 : 2024-06-12 09:51:37
- 链接: https://github.com/xz719/2024/06/12/js-DOM-和-BOM/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。