当前位置:首页 > JavaScript

js 实现 delegate

2026-02-01 18:24:36JavaScript

在 JavaScript 中实现事件委托(delegate)是一种高效的事件处理技术,它通过将事件监听器绑定到父元素而非子元素,利用事件冒泡机制动态处理子元素的事件。以下是实现事件委托的几种方法:

使用 addEventListener 和事件目标检查

通过事件冒泡捕获子元素事件,检查事件目标(event.target)是否符合条件:

document.getElementById('parent').addEventListener('click', function(event) {
  if (event.target.matches('.child')) {
    console.log('Child element clicked');
  }
});

动态处理嵌套子元素

若子元素可能包含更深层嵌套,使用 closest 方法向上查找匹配元素:

document.getElementById('parent').addEventListener('click', function(event) {
  const childElement = event.target.closest('.child');
  if (childElement) {
    console.log('Child or nested child clicked', childElement);
  }
});

封装通用事件委托函数

封装一个可复用的函数,支持选择器匹配和回调执行:

function delegate(parentSelector, childSelector, eventType, handler) {
  document.querySelector(parentSelector).addEventListener(eventType, function(e) {
    if (e.target.matches(childSelector)) {
      handler(e);
    }
  });
}

// 使用示例
delegate('#parent', '.child', 'click', (e) => {
  console.log('Delegated event triggered', e.target);
});

性能优化建议

  • 尽量选择最近的父元素作为委托容器,减少事件冒泡层级。
  • 避免在大型文档中使用全局委托(如 document),缩小监听范围。
  • 对于频繁触发的事件(如 mousemove),需谨慎使用委托。

兼容性处理

如需支持老旧浏览器,可添加 matches 的兼容性前缀:

js 实现 delegate

Element.prototype.matches = Element.prototype.matches || 
  Element.prototype.msMatchesSelector;

事件委托能显著减少内存占用,尤其适用于动态添加或大量子元素的场景。

标签: jsdelegate
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现tab选项卡切换

js实现tab选项卡切换

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

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…