首页  >  文章  >  web前端  >  如何在 Vanilla JavaScript 中有效地实现事件委托?

如何在 Vanilla JavaScript 中有效地实现事件委托?

DDD
DDD原创
2024-11-24 08:25:10190浏览

How Can I Effectively Implement Event Delegation in Vanilla JavaScript?

Vanilla JavaScript 中的事件委托:综合指南

在 vanilla JavaScript 中实现事件委托提供了一种高效且可维护的方式来处理事件侦听器。与涉及修改内置原型的 jQuery 事件委托不同,vanilla JavaScript 通过使用“.closest()”事件委托提供了更强大的方法。

将 jQuery 事件委托翻译为 Vanilla JavaScript

将 jQuery 示例:

$('#main').on('click', '.focused', function(){
    settingsPanel();
});

翻译成普通版本JavaScript,我们使用:

document.querySelector('#main').addEventListener('click', (e) => {
  if (e.target.closest('.focused')) {
    settingsPanel();
  }
});

'.closest()' 方法检查单击的元素是否具有与 '.focused' 选择器匹配的父元素。如果是这样,它会调用“settingsPanel()”函数。

复杂事件链的优化

为了提高性能,特别是在处理嵌套元素时,请考虑使用提前返回:

document.querySelector('#main').addEventListener('click', (e) => {
  if (!e.target.closest('.focused')) {
    return;
  }
  // code of settingsPanel here, if it isn't too long
});

当“.focused”选择器不存在时,这种方法可以防止不必要的代码执行匹配。

现场演示

以下代码片段展示了如何使用原生 JavaScript 的事件委托与 '.closest()':

document.querySelector('#outer').addEventListener('click', (e) => {
  if (!e.target.closest('#inner')) {
    return;
  }
  console.log('vanilla');
});

$('#outer').on('click', '#inner', () => {
  console.log('jQuery');
});

在此示例中,单击“#inner”元素会将“vanilla”记录到控制台,演示 vanilla JavaScript 的事件代表团。

以上是如何在 Vanilla JavaScript 中有效地实现事件委托?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn