2011-11-14 23 views
0

我有一個li類'tab3'。在其他地方有jQuery,當你把鼠標懸停在它上面時,它會添加'selected'類。我想要做的事,當發生這種情況:當類已添加類時jQuery做些什麼

<li class='tab3 selected'> 
    <div class='showme'>Show this</div> 
    <div class='addattr'>Add attributes</div> 
</li> 

$('.tab3.selected').each(function() { 
    $('.showme').show(); 
    $('.addattr').attr('style', 'position:relative; display:block'); 
}); 
+0

你需要找到懸停功能,並有附加你的代碼。或者實現另一個懸停功能綁定自己。 –

+0

這真的不是在元素上設置「樣式」的正確方法。查找jQuery「.css()」方法並使用它。這樣設置可能不起作用(在某些瀏覽器中)。 – Pointy

+0

對於jQuery而言,尖銳的問題給了你最好的答案。但是,首先:你的例子本身存在一些缺陷:div已經顯示(除非showme具有display:none);第二,如果showme和addattr都有css顯示:無;由於整個李是隱藏的,懸停永遠不會發生。 Geehs,這裏有很多差異;最後,css:hover是處理這些簡單事情的最佳方式。 –

回答

2

您可以通過CSS實現這一點:

<style type="text/css"> 
    .tab3 .showme{display:none;} 
    .tab3.selected .showme{display:block;} 
</style> 
+0

我喜歡這種方式,[這裏是一個小提琴](http://jsfiddle.net/Nrvfw/) – roselan

3

有沒有內置的方式做到這一點,但你總是可以註冊的事件處理程序,如「階級變」「自定義」事件,然後觸發每當你更新一個元素的類。 (你甚至可以重新定義「addClass」功能來做到這一點。)

$('whatever').addClass('selected').trigger('class-change'); 

// ... 

$('.tab3').bind('class-change', function() { 
    $('.tab3.selected').each(function() { 
    $('.showme').show(); 
    $('.addattr').attr('style', 'position:relative; display:block'); 
    }); 
}); 

當然,你也應該考慮使用普通的舊的CSS規則,使外觀改變添加/刪除類時,如@Brad Wedell的回答指出, 。

+0

呵呵?爲什麼不直接在懸停綁定中調用更改呢?如果他無法訪問添加所選類的懸停綁定函數,我看不到他可以在addClass()上觸發類​​更改。 – roselan

+0

這個想法是通過簡單地觸發事件,改變類的代碼不必知道其他代碼的細節。這是一種去耦合技術。要在「addClass()」中觸發「類更改」事件,需要用一個包裝器替換「addClass()」股票。 – Pointy

+0

是的,但仍然是主要想法。如果他無法訪問綁定懸停以執行addClass的函數,則無法觸發自定義事件。如果有訪問權限,那麼當然這是一種優雅的方式;) – roselan