事件委托是将监听器挂于父容器、通过event.target判断操作子元素的实用技术,适用于可排序表格、可折叠树形菜单、声明式工具提示等高频场景。

事件委托不是抽象概念,是能立刻用在真实交互里的技术。核心就一条:把一个监听器挂在父容器上,靠 event.target 判断点击的是哪个子元素,再执行对应操作。下面几个典型项目,覆盖高频场景,代码简洁、逻辑清晰,适合动手练手。
可排序表格(点击表头按列排序)
目标:点击 目标:点击节点文字(如 “Animals”、“Mammals”)时,切换其下方嵌套的 目标:任意元素加上 目标:支持添加、删除、切换完成状态,且新增的项也能响应事件,刷新不丢数据。 时,按该列数据类型( data-type="number" 或 data-type="string")对整个表格重新排序。 上,不给每个
单独绑定 e.target.closest("th") 精准捕获被点击的表头th.dataset.type 决定用 Number(a) - Number(b) 还是 a.localeCompare(b)
(跳过 ),用
Array.from() 转成数组后排序,再批量重插到
可折叠树形菜单(点击标题展开/收起子列表)
显隐状态。
上 或 ,否则无法触发事件、也无法加样式e.target.closest("li > span") 定位点击的标题容器,再找它的下一个兄弟 的空白区域(padding/margin)声明式工具提示(data-tooltip 行为)
data-tooltip="提示内容",鼠标悬停时自动显示带定位的提示框。
document 上:mouseover 显示,mouseout 隐藏e.target.closest("[data-tooltip]") 查找最近的带提示属性的祖先元素getBoundingClientRect() 计算,保持与元素间距 5px、水平居中rect.top ),自动显示在元素下方
动态待办清单(增删改 + 本地存储)
上e.target.closest(".todoitem--delete") 区分点击的是哪个删除按钮arr.splice(index, 1)),保持视图与数据一致localStorage 在每次变更后存一次,页面加载时读取并渲染











