![](/img/trans.png)
[英]Apply hover effect to child div only, without affecting parents with same class
[英]:hover select target only, not parents with same class
我该如何使目标元素仅忽略:hover
(忽略父对象)?
假设这是对象内部对象的递归设计,因此具有相同的类和自动生成的ID。
.group:hover { background-color: red; } .group { border: 1px solid black; width: 100px; padding: 20px; }
<div id="g1" class="group">aaaa <div id="g2" class="group">bbbb <div id="g3" class="group">cccc </div> </div> </div>
由于您使用javascript标记了问题,因此可以使用它来实现。 关键是使用.stopProgagation()
,它将阻止事件从“下降”到您的其他元素。
请参见下面的示例:
document.querySelectorAll(".group").forEach(elem => { elem.addEventListener('mouseover', function(e) { e.stopPropagation(); this.classList.add('group-hover'); }); elem.addEventListener('mouseout', function(e) { this.classList.remove('group-hover'); }); });
.group-hover { background-color: red; } .group { border: 1px solid black; width: 100px; padding: 20px; }
<div id="g1" class="group">aaaa <div id="g2" class="group">bbbb <div id="g3" class="group">cccc </div> </div> </div>
另外,如果您不想使用stopPropagation()
,则可以使用e.target
来获取事件的目标:
document.querySelectorAll(".group").forEach(elem => { elem.addEventListener('mouseover', e => e.target.classList.add('group-hover')); elem.addEventListener('mouseout', e => e.target.classList.remove('group-hover')); });
.group-hover { background-color: red; } .group { border: 1px solid black; width: 100px; padding: 20px; }
<div id="g1" class="group">aaaa <div id="g2" class="group">bbbb <div id="g3" class="group">cccc </div> </div> </div>
仅使用JS,并使用事件委托以更简单的方式
const All_g = document.querySelector('#g1'); All_g.onmouseover = function(event) { let target = event.target; target.style.background = 'red'; }; All_g.onmouseout = function(event) { let target = event.target; target.style.background = ''; };
.group { border: 1px solid black; width: 100px; padding: 20px; }
<div id="g1" class="group">aaaa <div id="g2" class="group">bbbb <div id="g3" class="group">cccc </div> </div> </div>
一些说明:=> https://javascript.info/mousemove-mouseover-mouseout-mouseenter-mouseleave
您可以通过以下方式进行操作:
var elements = document.getElementsByClassName('group');
var lastElement = null;
elements.each(element =>{
lastElement = element;
});
lastElement.on('hover', function(){
//do anything you wish with element
})
方法1
注册悬停事件以切换类并使用event.stopPropagation();
https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation
Event接口的Bubbles只读属性指示事件是否通过DOM冒泡。
https://developer.mozilla.org/en-US/docs/Web/API/Event/bubbles
方法2
Mouseenter事件-根据设计它不会冒泡-因此不必执行event.stopPropagation()
尽管与鼠标悬停类似,但是区别在于当指针从其后代的一个物理空间移动到其自己的物理空间时,它不会冒泡并且不会发送给任何后代。
https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseenter_event
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.