当前位置:首页 > JavaScript

js 实现 delegate

2026-03-14 17:33:36JavaScript

实现事件委托的基本原理

事件委托是利用事件冒泡机制,在父元素上监听子元素的事件。通过判断事件的目标(event.target)来执行对应的操作。这种方式可以减少事件监听器的数量,提升性能。

基础实现代码示例

function delegate(parentSelector, childSelector, eventType, handler) {
  const parent = document.querySelector(parentSelector);

  parent.addEventListener(eventType, function(event) {
    const target = event.target;
    if (target.matches(childSelector)) {
      handler.call(target, event);
    }
  });
}

支持更复杂的选择器匹配

如果需要匹配更复杂的选择器关系(如子元素内部的元素),可以改进匹配逻辑:

function delegate(parentSelector, childSelector, eventType, handler) {
  document.querySelector(parentSelector).addEventListener(eventType, function(e) {
    let el = e.target;
    while (el && el !== this) {
      if (el.matches(childSelector)) {
        handler.call(el, e);
        break;
      }
      el = el.parentNode;
    }
  });
}

使用示例

// 委托给ul处理所有li的点击事件
delegate('ul', 'li', 'click', function() {
  console.log('Clicked on:', this.textContent);
});

// 委托给div处理所有.button类的点击事件
delegate('.container', '.button', 'click', function() {
  this.classList.toggle('active');
});

注意事项

事件委托时需要注意事件目标可能不是直接匹配的子元素,而是子元素内部的元素。上述改进版本通过向上遍历DOM树来解决这个问题。

某些事件(如focus/blur)不会冒泡,需要使用它们的冒泡版本focusin/focusout。

js 实现 delegate

现代浏览器已经原生支持事件委托模式,可以通过Element.matches()方法判断事件目标。

标签: jsdelegate
分享给朋友:

相关文章

js轮播图实现原理

js轮播图实现原理

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

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…