2012-10-26 68 views
4

如果另一個div有一個類,我需要隱藏一個div。jquery「hasClass()」不工作?

我創建了一個非常簡單的例子HERE

我需要在底部的DIV隱藏時..好..點擊單詞「點擊」。它增加了一個類到中間的div很好,但似乎hasClass()不想工作?

注意:結構需要是這樣的。如果單擊「單擊」,請修改中間div(添加類?),並根據中間div操作底部div。有了這個設置 - 我不能只做「如果點擊單擊,slideUp()底部div」。

此外,一旦「確定」或「取消」被點擊,它將恢復,因爲中間div將不再有類。如果這是我可以在這裏工作的方法,哈哈。

+0

你不知道,在你的例子中,hasclass只被調用一次。它不是一個事件,每當這個元素有這個類時它就不會被觸發。 hasClass是一個函數,打算在**事件期間使用**來檢查某個特定元素是否具有特定類別 – SpYk3HH

回答

3

if說法是在任何函數之外,所以沒有理由腳本加載後它被調用。

See this fiddle,我想這就是你想要的。

+0

太棒了!謝謝! @所有人寫的 - 謝謝!所以我需要把這個用法放在函數本身 - gotcha,謝謝:) – Xhynk

1

將類追加到DOM元素後,應該適當地隱藏該元素。

$('.element').click(function() 
{ 
    $('.thisElement').addClass('hidepub'); 
    if($('.thisElement').hasClass('hidepub')) { 
     $('.thisElement').hide(); 
    } 
}); 
1

這隻會在腳本加載時調用一次。您需要確保它在您的.click(...)處理程序中被調用。

if($('#timestampdiv').hasClass('hidepub')) { 
    $('#major-publishing-actions').slideUp('slow'); 
} 
0

您可以將它們全部組合成一個功能 - 而你要那張支票是單擊功能裏面

您可以通過使用toggleClass並傳遞條件

$('a.edit-timestamp,a.save-timestamp,a.cancel-timestamp').click(function() { 
    var $tsdiv = $("#timestampdiv"); 
    // add class showpub if edit is clicked 
    $tsdiv.toggleClass('showpub',$(this).hasClass('edit-timestamp')); 
    // add class hidepub only if it wasn't edit that was clicked 
    $tsdiv.toggleClass('hidepub',!$(this).hasClass('edit-timestamp')); 

    // then do your toggle        
    if ($tsdiv.hasClass('hidepub')) { 
     $('#major-publishing-actions').slideUp('slow'); 
    }else{ 
     $('#major-publishing-actions').slideDown('slow'); 
    } 
}); 

http://jsfiddle.net/JPcge/減少addclass removeclass

您可以通過交換傳遞到toggleClass()方法的邏輯來反轉它

2

正如其他人所說,您沒有在所有點擊事件處理程序上致電if。使用if內部的語句創建一個自定義函數,並在所有點擊處理程序上調用它。

入住這fiddle

3

在一個側面說明,另一個變化,以檢查是否有一類是:

if ($('body.className').length) { 

還是建議hasClass雖然。很高興有時看到變化。