You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断事件目标是否包含在指定元素内?解决事件委托触发问题

你现有代码的逻辑只能在直接点击li元素本身的时候触发,如果你点击的是li内部的子元素(比如a标签、span这类),e.target指向的是实际被点击的子元素,无法匹配li选择器,所以逻辑不会执行。同时你需要额外加判断排除点击a标签的场景。

修改后的JavaScript代码

const menu = document.querySelector('.menu');
const textField = document.querySelector('p');

menu.addEventListener('click', e => {
  // 查找当前点击元素最近的li祖先节点
  const targetLi = e.target.closest('li');
  // 检查是否点击的是a标签或a标签内部元素
  const targetA = e.target.closest('a');
  // 仅满足在li内且未点击a标签时执行逻辑
  if (targetLi && !targetA) {
    textField.textContent = targetLi.textContent;
  }
});

逻辑说明

  • Element.closest() 方法会从当前点击元素开始向上遍历祖先节点,匹配到第一个符合选择器的元素就返回,找不到则返回null,天然适配动态生成的li结构,不需要给每个li单独绑定事件,符合你事件委托的使用需求。
  • 额外添加a标签的判断,只要点击位置在a标签范围内就直接中断逻辑,满足你点击a标签不触发更新的要求。

配套原有CSS代码

li {
  padding: 1em;
  border: 1px solid red;
}

a {
  border: 1px solid blue;
}

配套原有HTML代码

<div class="menu">
  <ul>
    <li><a>Home</a></li>
    <li><a>Gallery</a></li>
    <li><a>About us</a></li>
  </ul>

  <p></p>
</div>

内容的提问来源于stack exchange,提问作者noob_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:12:03