2016-05-19 85 views
0

我正在使用一些懸停的定價表。 您可以在此處看到:http://lhit.nl/lucid/ToggleClass not all divs

如您所見,當您將鼠標懸停在定價表上時,所有div都會切換類。 而那不是我想要的。我希望它是分開的課程。

我的jQuery:

$('.package').hover(function(){ 
    $('.name').toggleClass('name-hover') 
    $('.price-container').toggleClass('price-hover') 
    $('.price').toggleClass('white-hover') 
    $('.month').toggleClass('white-hover') 
}); 

的CSS只是來覆蓋當前的顏色:

.package .price-hover { 
     background: #008ed6; 
    } 

    .package .white-hover { 
     color: #fff; 
    } 

我已經嘗試過使用$(本),但它不工作。

+0

css for hover。 .name:hover {background:#008ed6;}等 –

+0

創建一個具有懸停CSS的類,然後當div被懸停然後切換該類 –

+1

也可以嘗試使用$(this).find('。name' )...只針對特定懸停項目內嵌的一個。 – nurdyguy

回答

2
$('.package').hover(function(){ 
    $(this).find('.name').toggleClass('name-hover') 
    $(this).find('.price-container').toggleClass('price-hover') 
    $(this).find('.price').toggleClass('white-hover') 
    $(this).find('.month').toggleClass('white-hover') 
}); 
+0

你也可以使用'$('。name',$(this))。toggleClass('name-hover')'而不是'.find' – Steve

0
  • 首先,你需要使用find只更改元素 內目前盤旋在.package類,所有這些元素否則會 轉班。
  • 其次,hover事件需要 2個函數,一個是鼠標進入懸停區域時,另一個是光標 退出懸停區域。處理hover事件的方式,它會切換兩次,一次懸停,一次懸停,最後保持不變。

試試這個代碼:

$('.package').hover(function(){ 
    $(this).find('.name').addClass('name-hover'); 
    $(this).find('.price-container').addClass('price-hover'); 
    $(this).find('.price').addClass('white-hover'); 
    $(this).find('.month').addClass('white-hover'); 
}, function(){ 
    $(this).find('.name').removeClass('name-hover'); 
    $(this).find('.price-container').removeClass('price-hover'); 
    $(this).find('.price').removeClass('white-hover'); 
    $(this).find('.month').removeClass('white-hover'); 
}); 
1

你可以使用每個():

$('package').each(function() { 
    var _this = this; 
    $(this).hover(function() { 
     $(_this).find('.name').toggleClass('name-hover') 
     $(_this).find('.price-container').toggleClass('price-hover') 
     $(_this).find('.price').toggleClass('white-hover') 
     $(_this).find('.month').toggleClass('white-hover') 
    }); 
    }) 
-1
$(".package").hover(function() { 
    $this = $(this); 
    $this.find(".name").toggleClass("name-hover"); 
    $this.find(".price-container").toggleClass("price-hover"); 
    $this.find(".price,.month").toggleClass("white-hover"); 
}); 

@Spartak Lalaj在jQuery 1.4 .hover()可以有一個參數。見https://api.jquery.com/hover/

+0

爲什麼你需要重新聲明這個? – MCMXCII

+0

繞過冗餘選擇器檢測操作。事實上,如果代碼中有不必要的選擇器,一些編輯(例如PhpStorm)可能會觸發優化警告。 – Vagharsh

+0

謝謝大家,它在jQuery方面幫了我很大的忙。但是現在我想在網站上的.order按鈕上發生懸停事件。其實很難做到。我不能用.order來改變.package。 – dutchcube

2

這可以簡單地通過CSS來實現。爲什麼要爲此添加Js?

package:hover .price-container{ 
    background: #008ed6; 
} 
+0

這實際上是最有意義的,但是如果類要在不同的類集上重用,那麼它將需要重複。 – MCMXCII

+0

@MCMXCII - 在這種情況下,您爲了重用類而使用JavaScript編寫的代碼量遠遠超過您實際需要使用不同的類集進行重複的次數。例如,假設有package2,我們需要應用它,然後你可以像這樣簡單地添加它:package:hover .price-container,package2:hover .container {background:#008ed6;}。現在將其與JavaScript代碼量進行比較。 –

+0

謝謝!我不知道你可以使用懸停後的孩子。謝謝! – dutchcube