DOM操作

DOM(文档对象模型)是HTML和XML文档的编程接口,它将文档表示为节点树,允许JavaScript操作文档的结构、样式和内容。

DOM节点

DOM树由各种类型的节点组成,主要包括:

  • 文档节点(Document):整个HTML文档
  • 元素节点(Element):HTML元素
  • 文本节点(Text):元素内的文本
  • 属性节点(Attribute):HTML元素的属性
  • 注释节点(Comment):注释内容

选择元素

通过ID选择

javascript
const element = document.getElementById('myElement');

通过类名选择

javascript
const elements = document.getElementsByClassName('myClass');
// 返回HTMLCollection(类似数组的对象)

通过标签名选择

javascript
const paragraphs = document.getElementsByTagName('p');
// 返回HTMLCollection

通过CSS选择器选择

javascript
// 选择第一个匹配的元素
const element = document.querySelector('.myClass');

// 选择所有匹配的元素
const elements = document.querySelectorAll('.myClass');
// 返回NodeList(类似数组的对象)

修改元素内容

innerHTML

设置或获取元素的HTML内容:

javascript
const element = document.getElementById('myElement');
element.innerHTML = '<p>新内容</p>';
console.log(element.innerHTML);

textContent

设置或获取元素的文本内容(不包含HTML标签):

javascript
const element = document.getElementById('myElement');
element.textContent = '新文本内容';
console.log(element.textContent);

innerText

设置或获取元素的可见文本内容:

javascript
const element = document.getElementById('myElement');
element.innerText = '新可见文本';
console.log(element.innerText);

修改元素属性

设置属性

javascript
const img = document.getElementById('myImage');
img.setAttribute('src', 'new-image.jpg');
img.setAttribute('alt', '新图片');

获取属性

javascript
const img = document.getElementById('myImage');
const src = img.getAttribute('src');
const alt = img.getAttribute('alt');

移除属性

javascript
const img = document.getElementById('myImage');
img.removeAttribute('alt');

直接访问HTML属性

javascript
const input = document.getElementById('myInput');
input.value = '新值';
console.log(input.value);

const a = document.getElementById('myLink');
a.href = 'https://example.com';
console.log(a.href);

修改元素样式

通过style属性

javascript
const element = document.getElementById('myElement');
element.style.color = 'red';
element.style.fontSize = '20px';
element.style.backgroundColor = 'yellow';

通过classList

javascript
const element = document.getElementById('myElement');

// 添加类
element.classList.add('newClass');

// 移除类
element.classList.remove('oldClass');

// 切换类(存在则移除,不存在则添加)
element.classList.toggle('activeClass');

// 检查是否包含类
const hasClass = element.classList.contains('myClass');

通过className

javascript
const element = document.getElementById('myElement');
element.className = 'newClass1 newClass2'; // 替换所有类
console.log(element.className);

创建和插入元素

创建元素

javascript
const newDiv = document.createElement('div');
const newText = document.createTextNode('新文本');
const newComment = document.createComment('这是一个注释');

插入元素

javascript
const parent = document.getElementById('parentElement');
const newElement = document.createElement('p');
newElement.textContent = '新段落';

// 在父元素末尾插入
parent.appendChild(newElement);

// 在指定元素之前插入
const referenceElement = document.getElementById('reference');
parent.insertBefore(newElement, referenceElement);

替换元素

javascript
const parent = document.getElementById('parentElement');
const oldElement = document.getElementById('oldElement');
const newElement = document.createElement('div');
newElement.textContent = '新元素';

parent.replaceChild(newElement, oldElement);

移除元素

javascript
const parent = document.getElementById('parentElement');
const child = document.getElementById('childElement');

parent.removeChild(child);

// 或直接移除元素
child.remove();

遍历DOM树

父节点

javascript
const element = document.getElementById('myElement');
const parent = element.parentNode;
const parentElement = element.parentElement; // 只返回元素节点

子节点

javascript
const element = document.getElementById('myElement');

// 获取所有子节点(包括文本、注释等)
const childNodes = element.childNodes;

// 获取所有子元素节点
const children = element.children;

// 获取第一个子节点
const firstChild = element.firstChild;

// 获取第一个子元素节点
const firstElementChild = element.firstElementChild;

// 获取最后一个子节点
const lastChild = element.lastChild;

// 获取最后一个子元素节点
const lastElementChild = element.lastElementChild;

兄弟节点

javascript
const element = document.getElementById('myElement');

// 获取前一个兄弟节点
const previousSibling = element.previousSibling;

// 获取前一个兄弟元素节点
const previousElementSibling = element.previousElementSibling;

// 获取后一个兄弟节点
const nextSibling = element.nextSibling;

// 获取后一个兄弟元素节点
const nextElementSibling = element.nextElementSibling;

操作表单元素

javascript
const form = document.getElementById('myForm');
const input = document.getElementById('myInput');
const checkbox = document.getElementById('myCheckbox');

// 获取表单元素的值
console.log(input.value);
console.log(checkbox.checked);

// 提交表单
form.submit();

// 重置表单
form.reset();

DOM事件

事件监听

javascript
const button = document.getElementById('myButton');

// 添加事件监听器
button.addEventListener('click', function(event) {
  console.log('按钮被点击了');
  console.log(event); // 事件对象
});

// 移除事件监听器
function handleClick() {
  console.log('按钮被点击了');
}

button.addEventListener('click', handleClick);
button.removeEventListener('click', handleClick);

常用事件类型

  • 鼠标事件:click, dblclick, mouseover, mouseout, mousedown, mouseup, mousemove
  • 键盘事件:keydown, keyup, keypress
  • 表单事件:submit, reset, input, change, focus, blur
  • 窗口事件:load, resize, scroll, unload

学习资源


继续学习:BOM操作

最后更新:2026-02-08