2011-04-07 40 views

回答

2

不与css一样,只有一个元素被悬停(来自重叠的非嵌套元素)。

jQuery的可以帮助,但它不是小事..

粗的实现是

  • 添加.row.col类的元素(适当
  • 绑定一个自定义事件处理程序检查鼠标坐标是否在他们的框内,并设置/取消悬停状态
  • 当鼠标移动到内部时t他的行和cols的容器(你应该将它们包装在一个),创建事件(我们绑定到行列数自定义类型的),并启动它在全球

HTML

<div id="container"> 
    <div id="row1" class="row"></div> 
    <div id="row2" class="row"></div> 
    <div id="col1" class="col"></div> 
    <div id="col2" class="col"></div> 
</div> 

的JavaScript

$('.col, .row').bind('intersect',function(e){ 
    var $me = $(this); 
    var pos = $me.offset(); 
    var size = {w:$me.width(), h:$me.height()}; 

    if (e.pageX > pos.left && e.pageY > pos.top && e.pageX < pos.left + size.w && e.pageY < pos.top + size.h) 
    { 
     $me.addClass('hover'); 
    } 
    else if ($me.is('.hover')) 
    { 
     $me.removeClass('hover'); 
    } 
}); 

$('#container').mousemove(function(e){ 
    var evt = jQuery.Event('intersect'); 
    evt.pageX = e.pageX; 
    evt.pageY = e.pageY; 
    $.event.trigger(evt); 
}); 

演示:http://jsfiddle.net/gaby/7V8AN/

+0

这太棒了,谢谢! – Justin808 2011-04-07 22:53:46

1

如果你使用一个表,你可以通常只是做这样的事情:

tr:hover > td { 
    background-color: yellow; 
} 

...但如果你有不嵌套元素,只有其中一人将被视为:hover版。您必须使用JavaScript将悬停状态传播到位于其下的其他元素。

+2

?? ??他的例子中没有表.. – 2011-04-07 21:16:21

+0

谢谢加比,很好的地方。 – 2011-04-07 21:21:00

+0

可以是任何东西,不只是一张桌子。 – trgraglia 2011-04-07 21:22:33

0

我会使用jQuery的兄弟姐妹:

$("#row1").siblings("#row2").css(attr, value); 

或者你可以使用.class或类似的东西。