我想绑定到一个元素并在它上面添加一个大纲。问题是,当我将鼠标悬停在嵌套元素上时,父元素也被选中。带通配符选择器/事件冒泡的嵌套元素
当我将鼠标悬停在“5深度”上时,我应该只在该跨度上有一个边框,而不是所有的父母。
我怎样才能避免这种情况?一种奇怪的用例,但我没有控制这里的标记:)
我想绑定到一个元素并在它上面添加一个大纲。问题是,当我将鼠标悬停在嵌套元素上时,父元素也被选中。带通配符选择器/事件冒泡的嵌套元素
当我将鼠标悬停在“5深度”上时,我应该只在该跨度上有一个边框,而不是所有的父母。
我怎样才能避免这种情况?一种奇怪的用例,但我没有控制这里的标记:)
这是因为event
冒泡,直到body
元素。使用event.stopPropagation()
停止事件传播,那么它只会限制触发事件的元素。
工作demo
<span id="1">
one deep
<span id="2">
two deep
<span id="3">
Three deep
<span id="4">
Four Deep
<span id="5">
five deep
</span>
</span>
</span>
$('#5').hover(function() {
$(this).css('outline', '2px solid red');
},
function() {
$(this).css('outline', 'none')
});
我不能让这与hover
工作。如果你从左到右混淆,反之亦然,它的行为并不像我想要的那样。相反,我做了这似乎很好的工作。
$('body *').mouseover(function(e) {
$(this).css('outline', '2px solid red');
e.stopPropagation();
});
$('body *').mouseout(function(e) {
$('span').css('outline', 'none');
});
您的演示不起作用? 'e'没有定义 – mrtsherman
它工作正常。再看看http://jsfiddle.net/7uQwr/3/ – ShankarSangoli
在回调处理程序中,确保你已经通过'e'。 – ShankarSangoli