首页 > 其他分享 >前端面试题(四)—— 事件委托(Event Delegation)

前端面试题(四)—— 事件委托(Event Delegation)

时间:2024-02-28 11:46:57浏览次数:32  
标签:面试题 元素 列表 Delegation Item 添加 事件 监听器 Event

一、什么是事件委托

事件委托(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、提高性能

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

 

标签:面试题,元素,列表,Delegation,Item,添加,事件,监听器,Event
From: https://www.cnblogs.com/MaiJiangDou/p/18037563

相关文章

  • Java面试题笔记-多线程篇
    创建线程的几种方式继承Thread类,重写run方法实现Runnable接口,实现run方法实现Callable,实现call方法,配合FutureTask获取线程返回结果通过ThreadPoolExecuter线程池获取线程资源这几种方法的底层都是Runnable,Thread是Runnable接口的实现类,Callable配合FutureTask使用......
  • WPF UI更新技巧:掌握EventHandler的基础与Dispatcher的高级应用
     概述:在WPF中,通过EventHandler可实现基础和高级的UI更新方式。基础用法涉及在类中定义事件,并在UI中订阅以执行更新操作。高级用法借助Dispatcher类,确保在非UI线程上执行操作后,通过UI线程更新界面。这两种方法提供了灵活而可靠的UI更新机制。在WPF(WindowsPresentationFounda......
  • 面试题(三)—— 跨域
    一、什么是跨域1、跨域的产生在Web开发中,一个网页请求另一个域(域名、协议、端口号任一不同)的资源,就会发生跨域。2、跨域请求跨域请求是指在浏览器中执行的请求,其目标资源的域名、协议或端口与当前页面不同。3、跨域资源共享(CORS)跨域资源共享(CORS)是一种机制,它允许在一个源(域......
  • 面试题以及一些问题概述
    1数据库三大范式是什么数据库的三大范式是指关系数据库设计中的三个规范化级别,用于规范化数据库中的数据结构,提高数据的一致性和减少数据冗余。这三大范式分别是:1.第一范式(1NF):要求数据库表中的每个字段都是原子性的,不可再分。也就是说,每个字段中的数据不能包含多个值或多个属......
  • 面试题(一)—— CSS 盒模型
    一、什么是 CSS盒模型CSS盒模型是指在网页中,每个元素都被看作是一个矩形的盒子,这个盒子包含了元素的内容(content)、内边距(padding)、边框(border)和外边距(margin)。 二、标准盒模型与怪异盒模型1、box-sizing两个常用参数:content-box:默认值。标准盒模型border-box:怪异盒模......
  • seata面试题
    1、请介绍一下你对SEATA的理解以及你对分布式事务的看法SEATA是一个开源的分布式事务解决方案,它旨在解决分布式系统中的数据一致性问题。我理解的分布式事务是指涉及多个服务或数据库的操作,需要保证这些操作要么全部成功,要么全部失败,以确保数据的一致性。在传统的单体应用中,可......
  • react错误:Uncaught Error: Too many re-renders. React limits the number of renders
    react错误:UncaughtError:Toomanyre-renders.Reactlimitsthenumberofrenderstopreventaninfiniteloop. 信铁寒胜:更改页面数据时未放到useEffect方法内,导致页面一直在刷新。  原因1:错误写法:<divclassName='article_item'onClick={toArticleDetail......
  • 代码随想录 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.0
    LeetCode:24.两两交换链表中的节点-力扣(LeetCode)思路:第一步:两两交换要考虑循环什么时候退出,当cur指针.next是null是就到尾部了,同理,链表不是奇数就是偶数,cur.next.next是空也是。第二步循环条件判断完了接下来要实现交换,如图所示,按步骤来就好,提前将1,2,3存好,接下来按图......
  • 看看 ChatGPT 给的前端面试题
    以下是一些可能出现在中国互联网公司前端开发工程师面试中的题目:解释一下CSS盒模型,并说明其中的各个部分。请解释一下响应式设计是什么,以及你是如何实现响应式设计的。什么是跨域资源共享(CORS)?它的工作原理是什么?如何在前端处理跨域请求?请解释一下JavaScript中的事件委托(E......
  • C# ManualResetEvent
    C#ManualResetEventManualResetEvent被用于在两个或多个线程间进行线程信号发送。多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态。当控制线程调用Set()方法,所有等待线程将恢复并继续执行。ManualResetEvent是如何工作的在内存中保持着一个bool值......