当前位置:首页 > 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);
  }
});

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

// 动态添加子元素后仍能触发委托事件
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);
  }
});

性能优化对比

  • 传统方式:为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()的老旧浏览器,可使用以下替代方案:

js委托实现

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

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

标签: js
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…