DOM (Document Object Model) 操作是前端开发的核心技能之一。常见的 DOM 操作可以分为以下几大类:
1. 查找/获取元素 (Selecting/Getting Elements)
这是所有操作的前提。
document.getElementById('id'):- 通过
id属性获取单个元素。返回Element对象或null。
- 通过
const element = document.getElementById('myId');
document.querySelector('selector'):- 使用 CSS 选择器获取第一个匹配的元素。返回
Element对象或null。
- 使用 CSS 选择器获取第一个匹配的元素。返回
const firstItem = document.querySelector('.list-item');
const submitButton = document.querySelector('button[type="submit"]');
document.querySelectorAll('selector'):- 使用 CSS 选择器获取所有匹配的元素。返回一个
NodeList(类数组对象)。
- 使用 CSS 选择器获取所有匹配的元素。返回一个
const allItems = document.querySelectorAll('.list-item');
allItems.forEach(item => { /* 处理每个元素 */ });
- 其他获取方法:
document.getElementsByClassName('class'): 通过类名获取,返回HTMLCollection。document.getElementsByTagName('tag'): 通过标签名获取,返回HTMLCollection。document.getElementsByName('name'): 通过name属性获取,返回NodeList。
2. 创建元素 (Creating Elements)
document.createElement('tag'):- 创建一个指定标签名的新元素节点。
const newDiv = document.createElement('div');
const newImg = document.createElement('img');
document.createTextNode('text'):- 创建一个文本节点。
const textNode = document.createTextNode('Hello World');
element.cloneNode(deep):- 克隆一个元素。
deep为true时深拷贝(包含子元素),false时浅拷贝。
- 克隆一个元素。
const clone = originalElement.cloneNode(true);
3. 添加/插入元素 (Appending/Inserting Elements)
parent.appendChild(child):- 将一个节点添加到父元素的子节点列表末尾。
parent.appendChild(newDiv);
parent.insertBefore(newNode, referenceNode):- 将
newNode插入到parent的referenceNode之前。
- 将
parent.insertBefore(newDiv, existingChild);
element.append(...nodesOrStrings)(现代方法):- 向元素内部末尾添加一个或多个节点或字符串。
parent.append(newDiv, 'some text');
element.prepend(...nodesOrStrings)(现代方法):- 向元素内部开头添加一个或多个节点或字符串。
parent.prepend(newDiv);
4. 修改元素 (Modifying Elements)
- 修改内容:
element.innerHTML = 'html': 设置或获取元素的 HTML 内容(注意 XSS 风险)。element.textContent = 'text': 设置或获取元素的纯文本内容(更安全)。element.innerText: 类似textContent,但受 CSS 样式影响(如隐藏元素不显示)。
- 修改属性:
element.setAttribute('name', 'value'): 设置属性。element.getAttribute('name'): 获取属性值。element.removeAttribute('name'): 移除属性。
- 直接访问属性:
element.id,element.src,element.href等。 - 修改样式:
element.style.property = 'value': 直接设置行内样式(使用驼峰命名,如backgroundColor)。element.style.color = 'red'; element.style.marginTop = '10px';element.classList: 操作类名(推荐用于 CSS 样式)。element.classList.add('class')element.classList.remove('class')element.classList.toggle('class')element.classList.contains('class')
- 修改其他:
element.id = 'newId'element.className = 'newClass'或element.className += ' anotherClass'
5. 删除元素 (Removing Elements)
parent.removeChild(child):- 从父元素中移除一个子元素。
const removed = parent.removeChild(childElement);
element.remove()(现代方法):- 直接将元素从其父元素中移除。
childElement.remove(); // 更简洁
6. 遍历 DOM (Traversing the DOM)
- 父子关系:
element.parentNode: 获取父节点。element.childNodes: 获取所有子节点(包括文本、注释节点)。element.children: 获取所有元素子节点(HTMLCollection)。element.firstChild/element.lastChildelement.firstElementChild/element.lastElementChild
- 兄弟关系:
element.previousSibling/element.nextSiblingelement.previousElementSibling/element.nextElementSibling
7. 事件处理 (Event Handling)
element.addEventListener('event', handler):- 为元素添加事件监听器(推荐方式)。
button.addEventListener('click', handleClick);
element.removeEventListener('event', handler):- 移除事件监听器。
- 直接赋值 (不推荐):
element.onclick = function() {}(只能绑定一个处理函数)
8. 其他常见操作
- 获取元素信息:
element.getBoundingClientRect(): 获取元素的大小和位置。window.getComputedStyle(element): 获取元素应用的所有 CSS 样式。
- 焦点操作:
element.focus(): 让元素获得焦点。element.blur(): 让元素失去焦点。
总结
掌握这些基本的 DOM 操作方法是前端开发的基础。现代开发中,虽然框架(如 React, Vue)减少了直接的 DOM 操作,但理解其原理对于调试、性能优化和编写原生 JS 代码至关重要。推荐优先使用 querySelector/querySelectorAll 和 classList 等现代 API。
THE END


