当前位置:首页 > JavaScript

js委托实现

2026-04-05 20:17:37JavaScript

事件委托的概念

事件委托是一种利用事件冒泡机制的编程技巧,通过将事件监听器绑定在父元素而非每个子元素上,减少内存消耗并提升性能。当子元素触发事件时,事件会冒泡到父元素,父元素通过判断事件源(event.target)来执行对应逻辑。

基本实现步骤

绑定父元素监听器

document.getElementById('parent').addEventListener('click', function(event) {
  // 检查事件源是否为需要处理的子元素
  if (event.target.matches('.child')) {
    console.log('子元素被点击', event.target);
  }
});

动态元素支持 事件委托天然支持动态添加的子元素,无需重新绑定监听器:

js委托实现

// 动态添加子元素后仍能触发委托事件
document.getElementById('parent').appendChild(document.createElement('div'));

进阶应用场景

多类型子元素区分 通过matches()方法或classList判断不同子元素:

parent.addEventListener('click', (event) => {
  if (event.target.matches('.btn-edit')) {
    handleEdit(event.target.dataset.id);
  } 
  else if (event.target.matches('.btn-delete')) {
    handleDelete(event.target.dataset.id);
  }
});

性能优化对比

js委托实现

  • 传统方式:为100个子元素绑定100个监听器
  • 委托方式:1个父元素监听器 + 条件判断 内存占用减少约99%(仅理论估算值)

注意事项

阻止冒泡干扰 若子元素需要单独阻止冒泡,需使用event.stopPropagation()

childElement.addEventListener('click', (e) => e.stopPropagation());

精确目标匹配 使用closest()处理嵌套结构:

parent.addEventListener('click', (e) => {
  const item = e.target.closest('.list-item');
  if (item) {
    // 处理逻辑
  }
});

浏览器兼容方案

对于不支持matches()的老旧浏览器,可使用以下替代方案:

// 使用className判断
if (event.target.className.indexOf('child') !== -1) { ... }

// 或tagName判断
if (event.target.tagName === 'BUTTON') { ... }

标签: js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…