2013-08-02 84 views
0

我想從父級刪除「打開」類,當我關閉切換,但是我下面的代碼不工作。它添加了「打開」類,但在關閉時不會刪除。任何人都可以看到我要去哪裏錯了嗎?jquery從父div中刪除類

$('.sub-menu').hide(); 
$('.toggle').click(function() { 
    if (!$(".sub-menu").is(":visible")) 
     $(this).addClass("open"); 

    $(this).next('.sub-menu').slideToggle(function() { 
     if (!$(".sub-menu").is(":visible")) 
      $(this).parent('.toggle').removeClass("open"); 
    }); 

}); 

更新:「nav」的HTML在請求下面。

<dd class="toggle open"> 
    <a id="navProducts">Products</a> 
</dd> 
<div class="sub-menu" style="display: block;">  
    <dd class="sub-menu-option"> 
    <a id="navBluray" href="nhdadmin/products/bluray">Blu-ray</a> 
    </dd> 
    <dd class="sub-menu-option"> 
    <a id="navXbox" href="nhdadmin/products/xbox">Xbox</a> 
    </dd> 
    <dd class="sub-menu-option"> 
    <a id="navPlayStation" href="nhdadmin/products/playstation">PlayStation</a> 
    </dd> 

+1

你能給我們一些html的工作,請? – pythonian29033

+0

這可能是問題嗎? http://jqueryminute.com/jquery-parent-vs-parents/ –

+1

對我來說,由於您使用.next()來定位.sub菜單,它不是.toggle的子元素,而是一個兄弟。但它只是猜測真的沒有任何HTML – ninja

回答

1

試試這個:

$('.toggle').click(function() { 
    if (!$(".sub-menu").is(":visible")) 
     $(this).addClass("open"); 

    var currentSlide = $(this); 
    $(this).next('.sub-menu').slideToggle(function() { 
     if (!$(".sub-menu").is(":visible")) 
      currentSlide.removeClass("open"); 
    }); 
}); 
+0

工作的一種享受,謝謝。 – thatuxguy

+0

這和我的答案一樣,但是有一個額外的變量。 – Trojan

+0

但我有代碼,所有程序員都不會說英文。 less yada-yada,更多代碼 – pythonian29033

2

您要添加的 「開放」 類上點擊.toggle元素。然後嘗試將其從$(this)(切換元素).parent('.toggle')(切換元素的父級「toggle」 - 不存在)中刪除。

刪除.parent('.toggle'),您的代碼將工作。

1

嘗試

$('.sub-menu').hide(); 
$('.toggle').click(function() { 
    var toggle = $(this); 

    toggle.next('.sub-menu').slideToggle(function() { 
     if ($(this).is(":visible")){ 
      toggle.addClass("open"); 
     } else { 
      toggle.removeClass("open"); 
     } 
    }); 

}); 
+0

也運行良好,我選擇了另一個解決方案,因爲它在菜單打開之前添加了CSS,並在關閉後關閉:)謝謝。 – thatuxguy

0

試試這個

$(this).parent('.toggle').removeClass("open"); 

代替

$(this).prev('.toggle').removeClass("open"); 

希望它會幫助