如题,结合官方文档与网络帖子,利用AI整理
DOM & BOM 对象方法属性全面总结
DOM(文档对象模型)
概念介绍
DOM (Document Object Model) 是浏览器把HTML或XML文档结构化成对象的方式,并提供了一套API让JavaScript去操作这些对象,从而动态控制网页内容、结构和样式。
核心特点:
-
DOM将文档表示为节点树结构
-
每个节点都是一个对象,可以被JavaScript访问和修改
-
DOM不是JavaScript语言的一部分,而是浏览器提供的Web API
-
支持跨平台和跨语言访问
Document对象
概念:代表整个HTML文档,是DOM树的根节点
常用属性
| 属性名 | 说明 |
|---|---|
document.documentElement |
获取<html>元素 |
document.body |
获取<body>元素 |
document.head |
获取<head>元素 |
document.title |
获取或设置文档标题 |
document.URL |
获取当前文档的URL |
document.domain |
获取文档的域名 |
document.cookie |
获取或设置cookie |
document.referrer |
获取引用页面的URL |
document.characterSet |
获取文档的字符编码 |
document.readyState |
获取文档的加载状态 |
document.doctype |
获取文档类型声明 |
document.activeElement |
获取当前获得焦点的元素 |
document.hidden |
获取文档是否隐藏 |
document.visibilityState |
获取文档的可见性状态 |
常用方法
| 方法名 | 说明 |
|---|---|
getElementById(id) |
通过ID获取元素 |
getElementsByClassName(className) |
通过类名获取元素集合 |
getElementsByTagName(tagName) |
通过标签名获取元素集合 |
querySelector(selector) |
通过CSS选择器获取第一个匹配元素 |
querySelectorAll(selector) |
通过CSS选择器获取所有匹配元素 |
createElement(tagName) |
创建新的元素节点 |
createTextNode(text) |
创建新的文本节点 |
createDocumentFragment() |
创建文档片段 |
write(content) |
向文档写入内容 |
open() |
打开文档以便写入 |
close() |
关闭文档写入 |
addEventListener(eventName, listener) |
添加事件监听器 |
removeEventListener(eventName, listener) |
移除事件监听器 |
dispatchEvent(event) |
派发事件 |
Element对象
概念:代表HTML元素,是DOM树中的元素节点
常用属性
| 属性名 | 说明 |
|---|---|
element.id |
获取或设置元素的ID |
element.className |
获取或设置元素的类名 |
element.classList |
获取元素的类列表对象 |
element.style |
获取元素的内联样式对象 |
element.innerHTML |
获取或设置元素的HTML内容 |
element.textContent |
获取或设置元素的文本内容 |
element.attributes |
获取元素的所有属性 |
element.parentElement |
获取父元素 |
element.children |
获取子元素集合 |
element.firstElementChild |
获取第一个子元素 |
element.lastElementChild |
获取最后一个子元素 |
element.previousElementSibling |
获取前一个兄弟元素 |
element.nextElementSibling |
获取后一个兄弟元素 |
element.offsetTop |
获取元素相对于offsetParent的顶部偏移 |
element.offsetLeft |
获取元素相对于offsetParent的左侧偏移 |
element.offsetWidth |
获取元素的宽度(包括边框和内边距) |
element.offsetHeight |
获取元素的高度(包括边框和内边距) |
element.clientWidth |
获取元素的内容宽度(不包括边框) |
element.clientHeight |
获取元素的内容高度(不包括边框) |
element.scrollTop |
获取或设置元素的垂直滚动位置 |
element.scrollLeft |
获取或设置元素的水平滚动位置 |
element.scrollWidth |
获取元素的总宽度(包括不可见部分) |
element.scrollHeight |
获取元素的总高度(包括不可见部分) |
element.dataset |
获取元素的自定义数据属性 |
常用方法
| 方法名 | 说明 |
|---|---|
setAttribute(name, value) |
设置元素属性 |
getAttribute(name) |
获取元素属性值 |
removeAttribute(name) |
移除元素属性 |
hasAttribute(name) |
检查元素是否有指定属性 |
appendChild(child) |
添加子元素到末尾 |
insertBefore(newChild, refChild) |
在指定位置插入子元素 |
removeChild(child) |
移除子元素 |
replaceChild(newChild, oldChild) |
替换子元素 |
cloneNode(deep) |
克隆元素节点 |
contains(node) |
检查元素是否包含指定节点 |
scrollIntoView(behavior) |
滚动到视图中 |
focus() |
使元素获得焦点 |
blur() |
使元素失去焦点 |
click() |
模拟点击元素 |
classList.add(className) |
添加类名 |
classList.remove(className) |
移除类名 |
classList.toggle(className) |
切换类名 |
classList.contains(className) |
检查是否有类名 |
Node对象
概念:DOM树中的所有节点都继承自Node接口
节点类型
| 节点类型 | 值 | 说明 |
|---|---|---|
ELEMENT_NODE |
1 | 元素节点 |
TEXT_NODE |
3 | 文本节点 |
COMMENT_NODE |
8 | 注释节点 |
DOCUMENT_NODE |
9 | 文档节点 |
DOCUMENT_TYPE_NODE |
10 | 文档类型节点 |
DOCUMENT_FRAGMENT_NODE |
11 | 文档片段节点 |
常用属性
| 属性名 | 说明 |
|---|---|
nodeType |
节点类型 |
nodeName |
节点名称 |
nodeValue |
节点值 |
parentNode |
父节点 |
childNodes |
子节点集合 |
firstChild |
第一个子节点 |
lastChild |
最后一个子节点 |
previousSibling |
前一个兄弟节点 |
nextSibling |
后一个兄弟节点 |
ownerDocument |
所属文档 |
textContent |
文本内容 |
常用方法
| 方法名 | 说明 |
|---|---|
appendChild(child) |
添加子节点 |
insertBefore(newChild, refChild) |
插入子节点 |
removeChild(child) |
移除子节点 |
replaceChild(newChild, oldChild) |
替换子节点 |
cloneNode(deep) |
克隆节点 |
normalize() |
规范化节点 |
isEqualNode(node) |
检查节点是否相等 |
contains(node) |
检查是否包含节点 |
hasChildNodes() |
检查是否有子节点 |
DOM事件处理
事件级别
-
DOM0级事件:直接通过元素属性绑定
-
DOM2级事件:使用addEventListener,支持事件捕获和冒泡
-
DOM3级事件:扩展了事件类型,增加了更多事件接口
事件流阶段
-
捕获阶段:事件从文档根节点向下传播到目标元素
-
目标阶段:事件到达目标元素
-
冒泡阶段:事件从目标元素向上传播到文档根节点
常用事件方法
| 方法名 | 说明 |
|---|---|
addEventListener(type, listener, useCapture) |
添加事件监听器 |
removeEventListener(type, listener, useCapture) |
移除事件监听器 |
dispatchEvent(event) |
派发事件 |
preventDefault() |
阻止事件默认行为 |
stopPropagation() |
阻止事件传播 |
stopImmediatePropagation() |
立即阻止事件传播 |
常见事件类型
鼠标事件:
-
click- 鼠标点击 -
dblclick- 鼠标双击 -
mousedown- 鼠标按下 -
mouseup- 鼠标释放 -
mouseover- 鼠标悬停 -
mouseout- 鼠标离开 -
mousemove- 鼠标移动 -
mouseenter- 鼠标进入 -
mouseleave- 鼠标离开
键盘事件:
-
keydown- 键盘按下 -
keyup- 键盘释放 -
input- 输入事件
表单事件:
-
submit- 表单提交 -
reset- 表单重置 -
change- 值改变 -
focus- 获得焦点 -
blur- 失去焦点
文档事件:
-
load- 页面加载完成 -
unload- 页面卸载 -
beforeunload- 页面即将卸载 -
DOMContentLoaded- DOM加载完成 -
resize- 窗口大小改变 -
scroll- 页面滚动
BOM(浏览器对象模型)
概念介绍
BOM (Browser Object Model) 是浏览器对象模型,提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的window对象是BOM的顶层对象。
核心特点:
-
BOM没有正式的标准,但所有浏览器都支持基本的对象和方法
-
window对象是BOM的核心,也是JavaScript的全局对象
-
提供了操作浏览器窗口、导航、历史记录等功能
-
包含DOM的document对象作为其子对象
Window对象
概念:代表浏览器窗口,是BOM的顶层对象
常用属性
| 属性名 | 说明 |
|---|---|
window.innerWidth |
视口宽度 |
window.innerHeight |
视口高度 |
window.outerWidth |
浏览器窗口宽度 |
window.outerHeight |
浏览器窗口高度 |
window.scrollX |
水平滚动距离 |
window.scrollY |
垂直滚动距离 |
window.screenX |
窗口相对于屏幕的X坐标 |
window.screenY |
窗口相对于屏幕的Y坐标 |
window.closed |
检查窗口是否关闭 |
window.frames |
获取窗口中的框架集合 |
window.parent |
获取父窗口 |
window.top |
获取顶级窗口 |
window.self |
获取当前窗口 |
window.name |
获取或设置窗口名称 |
window.location |
获取位置对象 |
window.history |
获取历史对象 |
window.navigator |
获取导航对象 |
window.screen |
获取屏幕对象 |
window.document |
获取文档对象 |
window.localStorage |
获取本地存储 |
window.sessionStorage |
获取会话存储 |
window.console |
获取控制台对象 |
常用方法
| 方法名 | 说明 |
|---|---|
alert(message) |
显示警告框 |
confirm(message) |
显示确认框 |
prompt(message, defaultText) |
显示输入框 |
open(url, name, features) |
打开新窗口 |
close() |
关闭窗口 |
focus() |
使窗口获得焦点 |
blur() |
使窗口失去焦点 |
print() |
打印窗口内容 |
scrollTo(x, y) |
滚动到指定位置 |
scrollBy(x, y) |
相对滚动 |
resizeTo(width, height) |
调整窗口大小 |
resizeBy(width, height) |
相对调整窗口大小 |
setTimeout(callback, delay) |
设置超时器 |
setInterval(callback, interval) |
设置定时器 |
clearTimeout(timeoutId) |
清除超时器 |
clearInterval(intervalId) |
清除定时器 |
requestAnimationFrame(callback) |
请求动画帧 |
cancelAnimationFrame(requestId) |
取消动画帧 |
btoa(string) |
Base64编码 |
atob(string) |
Base64解码 |
encodeURI(uri) |
编码URI |
decodeURI(uri) |
解码URI |
encodeURIComponent(uriComponent) |
编码URI组件 |
decodeURIComponent(uriComponent) |
解码URI组件 |
Location对象
概念:包含有关当前URL的信息
常用属性
| 属性名 | 说明 |
|---|---|
location.href |
完整URL |
location.protocol |
协议(http:或https:) |
location.host |
主机名和端口 |
location.hostname |
主机名 |
location.port |
端口号 |
location.pathname |
路径部分 |
location.search |
查询字符串 |
location.hash |
哈希值 |
location.origin |
源(协议+主机名+端口) |
常用方法
| 方法名 | 说明 |
|---|---|
assign(url) |
跳转到指定URL |
replace(url) |
替换当前URL |
reload(forceGet) |
重新加载页面 |
toString() |
返回完整URL字符串 |
History对象
概念:包含浏览器的历史记录
常用属性
| 属性名 | 说明 |
|---|---|
history.length |
历史记录数量 |
history.state |
当前历史状态 |
history.scrollRestoration |
滚动恢复模式 |
常用方法
| 方法名 | 说明 |
|---|---|
back() |
返回上一页 |
forward() |
前进到下一页 |
go(delta) |
跳转到指定页面 |
pushState(state, title, url) |
添加历史记录 |
replaceState(state, title, url) |
替换当前历史记录 |
Navigator对象
概念:包含浏览器的相关信息
常用属性
| 属性名 | 说明 |
|---|---|
navigator.userAgent |
用户代理字符串 |
navigator.appName |
浏览器名称 |
navigator.appVersion |
浏览器版本 |
navigator.platform |
操作系统平台 |
navigator.language |
浏览器语言 |
navigator.onLine |
是否在线 |
navigator.cookieEnabled |
是否启用cookie |
navigator.geolocation |
地理位置接口 |
navigator.mediaDevices |
媒体设备接口 |
navigator.hardwareConcurrency |
CPU核心数 |
navigator.deviceMemory |
设备内存 |
Screen对象
概念:包含屏幕的相关信息
常用属性
| 属性名 | 说明 |
|---|---|
screen.width |
屏幕宽度 |
screen.height |
屏幕高度 |
screen.availWidth |
可用屏幕宽度 |
screen.availHeight |
可用屏幕高度 |
screen.colorDepth |
颜色深度 |
screen.pixelDepth |
像素深度 |
screen.orientation |
屏幕方向 |
Storage对象
概念:提供本地存储功能
存储类型
-
localStorage:永久存储,无过期时间,容量约5MB
-
sessionStorage:会话存储,关闭页面后清除,容量约5MB
常用方法
| 方法名 | 说明 |
|---|---|
setItem(key, value) |
设置存储项 |
getItem(key) |
获取存储项 |
removeItem(key) |
移除存储项 |
clear() |
清除所有存储项 |
key(index) |
获取指定索引的键名 |
实际使用示例
DOM操作示例
元素选择和操作
1 | // 获取元素 |
创建和插入元素
1 | // 创建元素 |
事件处理
1 | // DOM0级事件 |
BOM操作示例
窗口操作
1 | // 窗口信息 |
位置和导航
1 | // 位置信息 |
历史记录
1 | // 历史记录操作 |
本地存储
1 | // localStorage |