← 返回文章列表
浏览器与网络·587 次阅读

从 jQuery 到原生 JS:DOM 操作与事件委托

从 jQuery 到原生 JS:DOM 操作与事件委托

项目准备去掉 jQuery,把常用写法对照原生 API 整理了一遍,发现现在的原生接口已经很好用了。

查询与操作

// jQuery: $('#list li')
document.querySelectorAll('#list li') // 静态 NodeList
document.getElementById('list') // 单个,性能最好

// 内容与属性
el.textContent = 'hello' // 代替 .text(),不解析 HTML
el.classList.add('active') // class 操作
el.dataset.id // 读取 data-id 属性
el.setAttribute('href', '/x')

创建和插入节点:

const li = document.createElement('li')
li.textContent = '新项目'
list.appendChild(li)
list.remove() // 现代浏览器可直接删除自己

事件流:捕获与冒泡

DOM 事件传播分三个阶段:捕获阶段(document → 目标)→ 目标阶段 → 冒泡阶段(目标 → document)。

addEventListener 第三个参数为 true 时在捕获阶段触发,默认 false 在冒泡阶段。

事件委托

不给每个子元素绑事件,而是把监听器绑在父元素上,靠冒泡统一处理:

list.addEventListener('click', (e) => {
  const item = e.target.closest('li')
  if (!item || !list.contains(item)) return
  console.log('点击了:', item.dataset.id)
})

事件委托的好处:

  • 动态添加的子元素无需重新绑定
  • 大量列表时只绑一个监听器,省内存

阻止默认行为用 e.preventDefault(),停止冒泡用 e.stopPropagation()——但委托场景下不要乱停冒泡,否则父级的其他监听也收不到了。

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4