夏天夏 夏天夏
首页
  • 技术分享

    • 小白都能看懂的闭包
    • 关于后台管理应用
    • 关于技术的取舍
    • 前端工程化
    • 切换node版本
    • 如何优雅的写事件代理
    • 我所不了解的技术
    • 我喜欢的parcel
    • angular1使用
    • npm script打造前端工作流
  • 发布一个node插件

    • 发布一个npm包
    • 如何打包一个插件工具库
    • 打包工具的选择
  • 年终总结

    • 2019年总结
    • 2020年总结
    • 2021年总结
  • JavaScript
  • CSS
  • 框架
  • Node
  • 服务
  • web3
  • 其他
我的作品
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夏天夏

我也不饶岁月
首页
  • 技术分享

    • 小白都能看懂的闭包
    • 关于后台管理应用
    • 关于技术的取舍
    • 前端工程化
    • 切换node版本
    • 如何优雅的写事件代理
    • 我所不了解的技术
    • 我喜欢的parcel
    • angular1使用
    • npm script打造前端工作流
  • 发布一个node插件

    • 发布一个npm包
    • 如何打包一个插件工具库
    • 打包工具的选择
  • 年终总结

    • 2019年总结
    • 2020年总结
    • 2021年总结
  • JavaScript
  • CSS
  • 框架
  • Node
  • 服务
  • web3
  • 其他
我的作品
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术分享

    • 小白都能看懂的闭包
    • 关于后台管理应用
    • 关于技术的取舍
    • 前端工程化
    • 切换node版本
    • 如何优雅的写事件代理
      • 如何优雅的写事件委托
      • 题目如下
      • Element.closest()
      • Element.matches()
      • css属性:pointer-events 阻止元素成为鼠标事件
    • 我所不了解的技术
    • 我喜欢的parcel
    • angular1使用
    • 使用npm script打造前端工作流
    • 发布一个npm包
    • 如何打包一个插件工具库
    • 打包工具的选择
  • 年终总结

  • 个人博客
  • 技术分享
夏天夏
2022-05-15
目录

如何优雅的写事件代理

# 如何优雅的写事件委托

记得在一个技术面试的时候,面试官问我如果有无数个dom,如何给每个dom添加点击事件,点击获取当前dom的内容,并且要我在编辑器里面写出来,好家伙,我第一个就想到事件委托,下面列出常用的几个事件委托的写法

# 题目如下

点击li获取当前li的内容

<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  ...
</ul>
1
2
3
4
5
6

# Element.closest()

Element.closest() 方法用来获取:匹配特定选择器且离当前元素最近的祖先元素(也可以是当前元素本身)。如果匹配不到,则返回 null。

let ul=document.querySelector('ul')
ul.addEventListener('click',(e)=>{
 let text= e.target.closest('li').textContent
 console.log(text)
})
1
2
3
4
5

# Element.matches()

Element.matches()如果元素被指定的选择器字符串选择,Element.matches()  方法返回true; 否则返回false。

let ul=document.querySelector('ul')
ul.addEventListener('click',(e)=>{
  if(e.target.matches('li')){
   let text= e.target.textContent
   console.log(text)
  }
})
1
2
3
4
5
6
7

# css属性:pointer-events 阻止元素成为鼠标事件

可以在css层面去掉点击事件。 该属性也可用来提高滚动时的帧频。的确,当滚动时,鼠标悬停在某些元素上,则触发其上的hover效果,然而这些影响通常不被用户注意,并多半导致滚动出现问题。对body元素应用pointer-events:none,禁用了包括hover在内的鼠标事件,从而提高滚动性能。

编辑 (opens new window)
#JavaScript#事件代理
上次更新: 2022/05/30, 17:29:17
切换node版本
我所不了解的技术

← 切换node版本 我所不了解的技术→

最近更新
01
远程办公的个人思考
02-21
02
SEO
01-02
03
NFT的价值
12-27
更多文章>
Theme by Vdoing | Copyright © 2019-2025 夏天夏 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式