一、什么是事件委托

事件委托(Event Delegation)是一种常用的技术。

它利用事件冒泡的特性,在父元素上监听事件,而不是在子元素上直接添加事件监听器。

通过在父元素上捕获事件,然后根据事件的目标(target)来执行相应的操作,从而实现对子元素的事件处理。

二、实现方式

通过给父元素添加事件监听器,然后在事件处理函数中判断事件的目标元素是否是我们所关心的子元素,如果是,则执行相应的操作,如果不是,则忽略。

例子

有一个列表,点击每个列表项的时候,打印列表项的文本内容,代码如下:

html

<ul id="list">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>

js

// 获取父元素(有序列表)
const list = document.getElementById('list'); // 添加事件监听器到父元素上
list.addEventListener('click', function (event) {
// 检查事件目标是否是列表项(li元素)
if (event.target.tagName === 'LI') {
// 在控制台中显示列表项的文本内容
console.log(event.target.textContent);
}
});

在这个例子中,事件监听器在父元素 <ul> 上,而不是每个 <li> 上,点击 <li> 时,事件会冒泡到父元素。

这样无论有多少 <li>,我们只需要在父元素添加一个事件监听器,就可以处理所有列表项的点击事件,从而减少了重复的代码,提高了代码的可维护性和性能。

三、优势

1、减少内存消耗

通过将事件监听器绑定到父元素上,而不是给每个子元素都添加监听器,可以减少内存消耗,特别是当页面中有大量子元素时。

2、动态元素的处理

对于动态添加的子元素,如果使用事件委托,不需要额外的操作来添加事件监听器,因为事件处理器是绑定在父元素上的,对于新添加的子元素也同样有效。

3、简化代码结构

使用事件委托可以减少重复的代码,特别是当多个子元素需要相同的事件处理逻辑时,只需在父元素上添加一个事件监听器即可。

4、提高性能

减少了事件处理器的数量,可以提高页面的性能,特别是在处理大量元素时。

前端面试题(四)—— 事件委托(Event Delegation)的更多相关文章

  1. javascript 事件委托 event delegation

    事件委托 event delegation 一.概念: 假设我们有很多个子元素,每个元素被点击时都会触发相应事件,普通的做法是给每个子元素添加一个事件监听. 而,事件委托则是给它们的父元素添加一个事件 ...

  2. 事件委托(event delegation)

    事件委托给我带来的第一印象是,如果可以的话请尝试得经常使用它,性能好! 通过字符串拼接后,并进行DOM插入,不会复制事件,此时需要进行事件委托了!!! 优点 事件委托对于web应用程序的性能有如下几个 ...

  3. 事件委托(event delegation) 或叫 事件代理

    比较好的介绍文章: 关于事件委托的整理 ,另附bind,live,delegate,on区别:https://www.cnblogs.com/MagicZhao123/p/5980957.html j ...

  4. 金三银四求职季,前端面试题小梳理(HTML、CSS、JS)

    好久没写学习记录,最近太多事,又到一年求职季,都说金三银四求职季,自己也做一下最近学习的一些前端面试题梳理,还是个小白,写的不对请指正,不胜感激. HTML篇 html语义化 用语义化的代码标签书写, ...

  5. 金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上

    金三银四,磨砺锋芒:剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上 引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待! ...

  6. 前端面试题(4)JavaScript

    前端面试题JavaScript(一) JavaScript的组成 JavaScript 由以下三部分组成: ECMAScript(核心):JavaScript 语言基础 DOM(文档对象模型):规定了 ...

  7. 史上最全前端面试题(含答案)-A篇

    HTML+CSS1.对WEB标准以及W3C的理解与认识标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被更多的用户所 ...

  8. 【重点--web前端面试题总结】

    前端面试题总结 HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应. JavaScri ...

  9. 2010年腾讯前端面试题学习(jquery,html,css部分)

    看了牛人写的回忆文章,里面有2010年腾讯的前端面试题,里面涉及到不少基础性的问题,js部分已学习,这是jquery,html和css部分,学习一下:) 原文地址:https://segmentfau ...

  10. 2010年腾讯前端面试题学习(js部分)

    看了牛人写的回忆文章,里面有2010年腾讯的前端面试题,里面涉及到不少基础性的问题,学习一下:) 原文地址:https://segmentfault.com/a/1190000012998107 js ...

随机推荐

  1. [转帖]CoreDump设置方式

    https://www.jianshu.com/p/f5c3134072d2 本文讲述利用coredump调试时,对coredump信息相关的设置方式. 设置core文件大小 列出所有资源的限制 #u ...

  2. [转帖]TaiShan v110 - Microarchitectures - HiSilicon

      https://en.wikichip.org/wiki/hisilicon/microarchitectures/taishan_v110 Edit Values TaiShan v110 µa ...

  3. OpenEuler2203安装Redislabs的简单记录

    OpenEuler2203安装Redislabs的简单记录 背景 操作系统国产化的需求下 想着都转型到openEuler上面来. 应用和容器都没什么问题了,现在考虑一下一些企业软件 最近一直在想研究一 ...

  4. sed 反斜线换成正斜线

    命令为: sed -i "s:\\\:\/:g" yourfiles

  5. Docker machine学习

    1. docker-machine 安装. From docker 官网 curl -L https://github.com/docker/machine/releases/download/v0. ...

  6. React中useEffect、useCallBack、useLayoutEffect

    在函数中使用定时器 import { useEffect, useState } from "react"; export default function Funcom() { ...

  7. PicoPixel贴图查看器

    Pico Pixel Pico Pixel是一款纹理查看器,支持查看以下文件格式:TGA,BMP,JPG,DDS,PNG,OpenEXR, KTX, HDR, GIF, TIF. 此外,Pico Pi ...

  8. TienChin 活动管理-修改活动接口

    前端 activity.js 直接替换现有的,最求速度了,后面在详细一个个记录,不在过多解释了. import request from '@/utils/request' /** * 查询活动列表 ...

  9. TienChin 活动管理-准备工作

    配置权限 INSERT INTO `sys_menu` VALUES (2014, '添加活动', 2003, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'tie ...

  10. 全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性

    全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性 1. 基本思想 大型语言模型(LLMs)具有出色的能力,但由于完全依赖其内部的参数化知识,它们 ...