2011-08-27 66 views
3

我想绑定到一个元素并在它上面添加一个大纲。问题是,当我将鼠标悬停在嵌套元素上时,父元素也被选中。带通配符选择器/事件冒泡的嵌套元素

当我将鼠标悬停在“5深度”上时,我应该只在该跨度上有一个边框,而不是所有的父母。

http://jsfiddle.net/7uQwr/

我怎样才能避免这种情况?一种奇怪的用例,但我没有控制这里的标记:)

回答

1

这是因为event冒泡,直到body元素。使用event.stopPropagation()停止事件传播,那么它只会限制触发事件的元素。

工作demo

+0

您的演示不起作用? 'e'没有定义 – mrtsherman

+0

它工作正常。再看看http://jsfiddle.net/7uQwr/3/ – ShankarSangoli

+1

在回调处理程序中,确保你已经通过'e'。 – ShankarSangoli

0
<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') 
    }); 
0

我不能让这与hover工作。如果你从左到右混淆,反之亦然,它的行为并不像我想要的那样。相反,我做了这似乎很好的工作。

http://jsfiddle.net/7uQwr/6/

$('body *').mouseover(function(e) { 
    $(this).css('outline', '2px solid red'); 
    e.stopPropagation(); 
}); 

$('body *').mouseout(function(e) { 
    $('span').css('outline', 'none'); 
});