事件传播(Event Propagation)是指在DOM(文档对象模型)中,当一个元素上的事件被触发时,该事件会从目标元素开始,按照一定的顺序向上传播到它的父元素,直到文档根节点。这个过程分为两个阶段:
假设我们有两个父元素parent1
和parent2
,以及一个子元素child
,我们希望在点击child
后将其从parent1
移动到parent2
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Event Propagation Example</title>
<style>
.parent {
padding: 20px;
border: 1px solid black;
margin: 10px;
}
</style>
</head>
<body>
<div id="parent1" class="parent">
Parent 1
<div id="child">Child</div>
</div>
<div id="parent2" class="parent">
Parent 2
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
const parent1 = document.getElementById('parent1');
const parent2 = document.getElementById('parent2');
const child = document.getElementById('child');
// 使用事件冒泡机制
parent1.addEventListener('click', (event) => {
if (event.target === child) {
parent1.removeChild(child);
parent2.appendChild(child);
}
});
});
</script>
</body>
</html>
parent1
和parent2
,以及一个子元素child
。DOMContentLoaded
事件触发后,获取parent1
、parent2
和child
的引用。parent1
上添加点击事件监听器,利用事件冒泡机制,当点击child
时,将其从parent1
移除并添加到parent2
。问题:如果需要在捕获阶段处理事件,应该如何修改代码?
解决方法:将事件监听器的第三个参数设置为true
,表示在捕获阶段处理事件。
parent1.addEventListener('click', (event) => {
if (event.target === child) {
parent1.removeChild(child);
parent2.appendChild(child);
}
}, true); // 设置为true表示在捕获阶段处理事件
通过这种方式,可以根据具体需求选择在捕获阶段或冒泡阶段处理事件,从而实现更灵活的事件管理。
领取专属 10元无门槛券
手把手带您无忧上云