08 DOM
08 DOM
document 对象
document 对象是 Web 开发中非常核心的一个对象,它代表了整个 HTML 文档,是 DOM(文档对象模型)树的根节点,提供了对文档中元素的访问和操作接口。以下是关于 document 对象的一些详细介绍:
1. 获取元素的方法
1.1 getElementById(id)
- 描述:根据元素的
id属性值获取对应的元素,返回一个元素对象。如果文档中没有匹配的元素,则返回null。 - 示例:
1
2let element = document.getElementById('myElement');
console.log(element); // 返回 id 为 'myElement' 的元素对象
1.2 getElementsByClassName(classNames)
- 描述:根据元素的
class属性值获取一组元素,返回一个HTMLCollection对象,该对象是一个类数组对象,包含所有匹配的元素。如果文档中没有匹配的元素,则返回一个空的HTMLCollection对象。 - 示例:
1
2let elements = document.getElementsByClassName('myClass');
console.log(elements); // 返回一个包含所有 class 为 'myClass' 的元素的 HTMLCollection 对象
1.3 getElementsByTagName(tagName)
- 描述:根据元素的标签名获取一组元素,返回一个
HTMLCollection对象,包含所有匹配的元素。如果文档中没有匹配的元素,则返回一个空的HTMLCollection对象。 - 示例:
1
2let elements = document.getElementsByTagName('div');
console.log(elements); // 返回一个包含所有 div 元素的 HTMLCollection 对象
1.4 querySelector(selector)
- 描述:使用 CSS 选择器来选择文档中的第一个匹配的元素,返回一个元素对象。如果文档中没有匹配的元素,则返回
null。 - 示例:
1
2let element = document.querySelector('.myClass');
console.log(element); // 返回第一个 class 为 'myClass' 的元素对象
1.5 querySelectorAll(selector)
- 描述:使用 CSS 选择器来选择文档中的所有匹配的元素,返回一个
NodeList对象,该对象是一个类数组对象,包含所有匹配的元素。如果文档中没有匹配的元素,则返回一个空的NodeList对象。 - 示例:
1
2let elements = document.querySelectorAll('.myClass');
console.log(elements); // 返回一个包含所有 class 为 'myClass' 的元素的 NodeList 对象
2. 文档信息属性
2.1 document.title
- 描述:获取或设置文档的标题,对应 HTML 中的
<title>标签内容。 - 示例:
1
2console.log(document.title); // 获取文档标题
document.title = '新标题'; // 设置文档标题
2.2 document.URL
- 描述:获取当前文档的完整 URL。
- 示例:
1
console.log(document.URL); // 获取当前文档的完整 URL
2.3 document.domain
- 描述:获取或设置当前文档的域名。设置
document.domain可以用于跨子域的通信。 - 示例:
1
2console.log(document.domain); // 获取当前文档的域名
document.domain = 'example.com'; // 设置文档域名
2.4 document.referrer
- 描述:获取加载当前文档的前一个文档的 URL。
- 示例:
1
console.log(document.referrer); // 获取前一个文档的 URL
3. 文档操作方法
3.1 document.createElement(tagName)
- 描述:创建一个新的元素节点,返回一个元素对象。
- 示例:
1
2let newElement = document.createElement('div');
console.log(newElement); // 返回一个新的 div 元素对象
3.2 document.createTextNode(text)
- 描述:创建一个新的文本节点,返回一个文本节点对象。
- 示例:
1
2let textNode = document.createTextNode('Hello, World!');
console.log(textNode); // 返回一个新的文本节点对象
3.3 document.appendChild(node)
- 描述:将一个节点添加到文档中的指定父节点的子节点列表的末尾。
- 示例:
1
2
3let parentElement = document.getElementById('parent');
let newElement = document.createElement('div');
parentElement.appendChild(newElement); // 将 newElement 添加到 parentElement 的末尾
3.4 document.insertBefore(newNode, referenceNode)
- 描述:将一个节点插入到文档中的指定父节点的子节点列表中,插入位置在
referenceNode之前。 - 示例:
1
2
3
4let parentElement = document.getElementById('parent');
let newElement = document.createElement('div');
let referenceElement = document.getElementById('reference');
parentElement.insertBefore(newElement, referenceElement); // 将 newElement 插入到 referenceElement 之前
3.5 document.removeChild(node)
- 描述:从文档中删除指定的节点。
- 示例:
1
2
3let parentElement = document.getElementById('parent');
let childElement = document.getElementById('child');
parentElement.removeChild(childElement); // 从 parentElement 中删除 childElement
3.6 document.replaceChild(newNode, oldNode)
- 描述:用一个新的节点替换文档中的一个旧的节点。
- 示例:
1
2
3
4let parentElement = document.getElementById('parent');
let newElement = document.createElement('div');
let oldElement = document.getElementById('old');
parentElement.replaceChild(newElement, oldElement); // 用 newElement 替换 oldElement
4. 事件相关方法
4.1 document.addEventListener(type, listener, options)
- 描述:为文档添加一个事件监听器。
- 示例:
1
2
3document.addEventListener('click', function() {
console.log('文档被点击');
});
4.2 document.removeEventListener(type, listener, options)
- 描述:移除文档上之前添加的事件监听器。
- 示例:
1
2
3
4
5function handleClick() {
console.log('文档被点击');
}
document.addEventListener('click', handleClick);
document.removeEventListener('click', handleClick);
5. 其他常用方法
5.1 document.write(text)
- 描述:向浏览器的文档流中直接写内容,可以用于动态生成 HTML 内容。不过在现代开发中,推荐使用更现代的方法(如
innerHTML、textContent等)来操作 DOM,因为document.write有一些已知的问题和限制。 - 示例:
1
document.write('<div>Hello, World!</div>');
5.2 document.getElementById(id).innerHTML
- 描述:获取或设置元素的 HTML 内容。
- 示例:
1
2
3let element = document.getElementById('myElement');
console.log(element.innerHTML); // 获取元素的 HTML 内容
element.innerHTML = '<span>New Content</span>'; // 设置元素的 HTML 内容
5.3 document.getElementById(id).textContent
- 描述:获取或设置元素的文本内容,与
innerHTML不同,textContent不会解析 HTML 标签。 - 示例:
1
2
3let element = document.getElementById('myElement');
console.log(element.textContent); // 获取元素的文本内容
element.textContent = 'New Text Content'; // 设置元素的文本内容
6. 文档状态属性
6.1 document.readyState
- 描述:返回文档的加载状态,可能的值有:
loading:文档正在加载。interactive:文档已加载完毕,但子资源(如图片、样式表等)仍在加载。complete:文档及其所有子资源都已加载完毕。
- 示例:
1
console.log(document.readyState); // 获取文档的加载状态
6.2 document.addEventListener('DOMContentLoaded', handler)
- 描述:监听
DOMContentLoaded事件,该事件在文档的初始 HTML 完全加载和解析完成后触发,不包括样式表、图片和子框架的加载。 - 示例:
1
2
3document.addEventListener('DOMContentLoaded', function() {
console.log('DOM 加载完成');
});
7. 窗口和文档的关系
document 对象是 window 对象的一部分,可以通过 window.document 访问。window 对象代表浏览器窗口,而 document 对象代表窗口中的文档内容。它们之间的关系如下:
window是全局对象,所有全局变量和函数都是window的属性。document是window的一个属性,代表文档内容。window和document之间有一些事件和方法是相互关联的,例如window.onload和document.addEventListener('load', handler)都可以用于监听页面加载完成的事件。
总结
document 对象是 Web 开发中非常重要的一个对象,它提供了对文档中元素的访问和操作接口,允许我们动态地创建、修改和删除元素,监听和处理各种事件,获取文档的状态信息等。掌握 document 对象的这些方法和属性,可以帮助我们更灵活地操作 DOM,实现丰富的交互效果。