2012-12-08 119 views
1

我在<div>内有几个<span>元素。当您将鼠标悬停在一个<span>上时,它应该突出显示之前的所有<spans>以及悬停<span>选择同一父母的所有在前孩子

我该如何使用CSS或jQuery来做到这一点?

jsFiddle example

我怀疑一个jQuery答案将做到以下几点,但我无法找到函数1 & 2.

  1. 获取当前悬停的元素的子#
  2. 选择所有孩子最多
  3. 将“悬停”类添加到他们

回答

4

您可以用jQuery做到这一点:

$('span').hover(​​​​​function(){ 
    $(this).prevAll().addClass('hover'); 
},function(){ 
    $(this).prevAll().removeClass('hover'); 
});​ 

Demonstration

这使用prevAll选择同一div的所有前面的跨度。不需要使用当前元素的索引,但是可以使用索引函数获得它,然后使用lt选择器($(this).sibblings(":lt("+$(this).index+")"))。当然,prevAll要简单得多。

由于注意到了elclarns,这可以在

$('span').hover(function(){ 
    $(this).prevAll().toggleClass('hover'); 
});​ 
+0

上帝,我爱jQuery的。感谢dystroy! –

+0

更简短:'$(this).prevAll()。toggleClass('hover')'http://jsfiddle.net/6zm3E/2/ – elclanrs

+0

这是一个很好的答案我写了一个最接近.container,然后nextUntill - 这很简单 –

0

缩短按照规定,我什么都看不到难在这里,我们将使用prevAll()函数来选择所有的兄弟姐妹先前的例子基于当前项目。

$("span").hover(function(){ 
     $(this).prevAll().addClass("hover"); 

}, function(){ 
     $(this).removeClass("hover"); 
})​ 

工作示例:http://jsfiddle.net/6zm3E/1/

1

这取决于兼容性,可以使用CSS,虽然没有加入类名称:

div:hover span { 
    /* colours all descendent spans of hovered-div */ 
    background-color: #ffa; 
} 

div:hover span:hover, 
div:hover span:hover ~ span { 
    /* 'de-colours' the hovered-span, and 
     the subsequent sibling spans */ 
    background-color: #fff; 
} 
+0

有趣。你可以修复它,使它不着色最后一个div,如果你把它悬停? –

+0

应该指出的是[这与IE7或IE8不兼容](http://caniuse.com/#feat=css-sel3)。 –

+0

@dystroy:我不完全确定我理解你的第一个评论,但我认为你的意思是当':hover'离开'span'时突然闪烁,突出显示所有'span',直到另一个'span'被徘徊?如果是这样,否(尽管可能以某种方式)。至于IE <9,不,这是一个相当有限的演示,不幸的是。但是,正如你所说的那样,“有趣”。如果仅仅作为概念验证...... =) –