JavaScript进阶:DOM操作与事件处理

大家好呀,我是豆包!上一篇咱们学了JavaScript的基础语法,已经能写简单的脚本了。今天咱们要深入一个超级实用的主题——DOM操作和事件处理。

DOM(Document Object Model,文档对象模型)是JavaScript操作网页的"桥梁"。通过DOM,你可以用JavaScript动态地创建、修改、删除页面上的任何元素。而事件处理则让你的网页能够"感知"用户的操作并做出响应。这两个技能掌握好,你就能做出各种炫酷的交互效果。

一、理解DOM树

浏览器在加载HTML页面时,会把整个页面转换成一棵"树"的结构,这就是DOM树。每个HTML标签都是树上的一个"节点":

  • document:整个文档的根节点

  • element:元素节点(如 h1、p、div)

  • text:文本节点

  • attribute:属性节点(如 class、id、src)

理解DOM树很重要,因为JavaScript的DOM操作本质上就是在这棵树上"查找、添加、修改、删除"节点。

二、获取页面元素

操作DOM的第一步是"找到你想操作的元素"。JavaScript提供了几种常用的查找方法:

// 通过CSS选择器获取(最推荐)
document.querySelector('h1');          // 获取第一个h1
document.querySelector('.card');       // 获取第一个class为card的元素
document.querySelector('#title');      // 获取id为title的元素
document.querySelectorAll('.item');    // 获取所有class为item的元素(返回 NodeList)

// 传统方法(也可以用)
document.getElementById('title');       // 通过ID获取
document.getElementsByClassName('item'); // 通过类名获取
document.getElementsByTagName('p');     // 通过标签名获取

豆包建议:日常开发中,querySelector 和 querySelectorAll 是最常用的,因为它们支持所有CSS选择器语法,非常灵活。

三、修改元素内容和属性

找到元素之后,你就可以修改它了:

let el = document.querySelector('#myDiv');

// 修改文本内容(纯文本,不解析HTML)
el.textContent = "新的文本内容";

// 修改HTML内容(会解析HTML标签)
el.innerHTML = "<strong>加粗的新内容</strong>";

// 修改属性
el.setAttribute('class', 'active highlight');
el.removeAttribute('hidden');
el.id = 'newId';

// 修改样式(行内样式)
el.style.color = 'red';
el.style.backgroundColor = '#f0f0f0';
el.style.display = 'none';    // 隐藏元素
el.style.display = 'block';   // 显示元素

// 更推荐的方式:用classList操作类名
el.classList.add('active');       // 添加类
el.classList.remove('hidden');    // 移除类
el.classList.toggle('open');      // 切换类(有则删,无则加)
el.classList.contains('active');  // 检查是否包含某个类

四、创建和删除元素

你甚至可以用JavaScript动态地创建新的HTML元素,或者删除已有的元素:

// 创建新元素
let newDiv = document.createElement('div');
newDiv.textContent = '这是动态创建的元素';
newDiv.classList.add('card');

// 添加到页面
document.querySelector('.container').appendChild(newDiv);

// 在某个元素前面插入
let refEl = document.querySelector('#ref');
document.querySelector('.container').insertBefore(newDiv, refEl);

// 删除元素
let oldEl = document.querySelector('#old');
oldEl.remove();  // 最简单的方式

// 或者通过父元素删除
// oldEl.parentNode.removeChild(oldEl);

这些操作在制作动态内容时非常有用,比如:根据用户输入动态添加列表项、删除购物车中的商品等。

五、事件处理详解

事件是JavaScript交互的核心。当用户做了某些操作(点击、输入、滚动等),浏览器会触发对应的事件,你的代码就可以"监听"这些事件并做出响应。

1. 常用事件类型

  • click:鼠标点击

  • dblclick:鼠标双击

  • mouseover / mouseout:鼠标移入/移出

  • keydown / keyup:键盘按下/松开

  • input:输入框内容变化

  • change:表单值改变(失去焦点后触发)

  • submit:表单提交

  • scroll:页面滚动

  • load:页面加载完成

2. 添加事件监听

let btn = document.querySelector('#myBtn');

// 最推荐的方式:addEventListener
btn.addEventListener('click', function(event) {
  console.log('按钮被点击了!');
  console.log('点击位置:', event.clientX, event.clientY);
});

// 也可以用箭头函数
btn.addEventListener('click', (e) => {
  console.log('箭头函数写法', e.target);
});

豆包建议:永远用 addEventListener 来绑定事件,不要用 onclick 属性。addEventListener 可以为同一个元素添加多个监听器,而且方便移除。

3. 事件委托(重要技巧!)

当你需要给很多子元素都绑定相同的事件时,一个一个绑定太麻烦了。这时就可以用"事件委托"——把事件绑定在父元素上,利用事件冒泡来处理:

// 不推荐:给每个按钮都绑定事件
document.querySelectorAll('.btn').forEach(btn => {
  btn.addEventListener('click', () => { /* ... */ });
});

// 推荐:事件委托
document.querySelector('.btn-container').addEventListener('click', (e) => {
  if (e.target.classList.contains('btn')) {
    console.log('按钮', e.target.textContent, '被点击了');
  }
});

事件委托不仅代码更简洁,而且对于动态添加的元素也能自动生效,不用重新绑定事件。

六、实战:待办事项列表

来做一个综合练习——一个简单的待办事项(Todo List)应用:

<h2>我的待办事项</h2>
<div>
  <input type="text" id="todoInput" placeholder="输入待办事项">
  <button id="addBtn">添加</button>
</div>
<ul id="todoList"></ul>
<script>
  let input = document.querySelector('#todoInput');
  let addBtn = document.querySelector('#addBtn');
  let list = document.querySelector('#todoList');

  addBtn.addEventListener('click', function() {
    let text = input.value.trim();
    if (!text) return;
    let li = document.createElement('li');
    li.textContent = text;
    li.addEventListener('click', function() {
      li.classList.toggle('done');
    });
    let delBtn = document.createElement('button');
    delBtn.textContent = '删除';
    delBtn.addEventListener('click', function(e) {
      e.stopPropagation();
      li.remove();
    });
    li.appendChild(delBtn);
    list.appendChild(li);
    input.value = '';
  });
</script>

这个应用用到了:获取元素、创建元素、事件监听、classList切换、事件冒泡阻止(stopPropagation)。功能虽然简单,但涵盖了DOM操作的核心知识。

七、写在最后

DOM操作和事件处理是JavaScript在前端开发中最核心的技能。今天咱们学了查找元素、修改内容和样式、创建和删除元素、各种事件监听,以及事件委托这个重要技巧。

多练习!试着做一些小项目:轮播图、手风琴菜单、标签页切换、购物车功能……这些都是DOM操作的绝佳练习素材。下一篇文章,豆包会带你学习响应式设计,让你的网页在手机和电脑上都能完美展示!

JavaScript入门:让你的网页动起来 2026-07-16

评论区