事件捕获是否会经过触发节点的同级节点?结合DOM实例咨询
事件捕获会不会经过触发节点的同级节点?
好问题!直接给你明确结论:事件捕获阶段完全不会经过触发节点的同级节点。
我们结合你给出的DOM结构来拆解具体逻辑:
<div id="parent"> d1 <div id="child-1">child-1</div> <div id="child-2">child-2</div> </div>
当你点击child-2触发事件时,事件捕获的传播路径是严格沿着DOM树从根节点自上而下直达目标节点,只会经过目标节点的「祖先链」:window → document → html → body → parent → child-2
整个路径里完全不会出现child-1这个同级节点,自然也不会去检查它是不是事件触发目标。
为了更直观验证,你可以跑一段测试代码:
const parent = document.getElementById('parent'); const child1 = document.getElementById('child-1'); const child2 = document.getElementById('child-2'); // 绑定捕获阶段的监听器(第三个参数设为true表示捕获阶段触发) parent.addEventListener('click', () => console.log('parent 捕获阶段'), true); child1.addEventListener('click', () => console.log('child-1 捕获阶段'), true); child2.addEventListener('click', () => console.log('child-2 捕获阶段'), true);
点击child-2后,控制台只会输出:
parent 捕获阶段 child-2 捕获阶段
child-1的捕获监听器根本不会触发——这就实锤了捕获路径不会经过同级节点。
顺便补充下事件流的完整逻辑:事件会依次经过「捕获阶段(根到目标)→ 目标阶段(目标节点本身)→ 冒泡阶段(目标回到根)」,不管是捕获还是冒泡阶段,同级节点都不会被波及,除非事件是直接在它们身上触发的。
内容的提问来源于stack exchange,提问作者user4602966
相关产品推荐
相关产品推荐

