2012-12-08 117 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,不,這是一個相當有限的演示,不幸的是。但是,正如你所說的那樣,「有趣」。如果僅僅作爲概念驗證...... =) –