2012-06-28 26 views
0

我有綁定到click事件以下行:removeClass忽略,而addClass等人的作品

$(this).parents(".addonoptions").children().removeClass("highlight"); 

應該剝去父母的孩子的「亮點」級。但它沒有做任何事情。

如果我把它改成這樣:

$(this).parents(".addonoptions").children().addClass("highlight"); 

然後亮點類成功添加到所有的孩子們。同樣,如果我將「removeClass」更改爲「hide()」,那麼選定的元素將被隱藏起來,所以我知道正在選擇正確的元素。我已經閱讀了關於removeClass無法正常工作的許多其他問題和答案,但是在這種情況下,似乎沒有任何答案能夠奏效。

下面是HTML的一個基本示例,「clickme」類與上面的事件綁定在一起。

<div class="addonoptions"> 
<div><p class="clickme">Click to remove highlights</p></div> 
<div class="highlight"><p class="clickme">Click to remove highlights</p></div> 
</div> 
+1

沒有應用類或者你只是沒有看到該元素的風格變化? –

+0

需要'this'所指的處理程序代碼 – charlietfl

+0

Andrew - 類不會被刪除,樣式也不會改變。 這是指具有「clickme」類的clicked元素。 –

回答

1

你真的可以通過簡單地在T調用removeClass簡化去除他類本身:

DEMO:http://jsfiddle.net/hwxj9/

$('.clickme').click(function() { 
    /* remove highlight class*/ 
    $('div.highlight').removeClass('highlight'); 
    /* or if class exists in other parts of page 
     $(this).closest('.addonoptions').find('div.highlight').removeClass('highlight'); 

    */ 
    /* highlight parent of p */ 
    $(this).parent().addClass('highlight'); 

}) 
+0

簡單起作用!謝謝。 –

1

children只找到直接子節點(在這種情況下,<div> S的替代<p>標籤,使用find代替

活生生的例子 - http://jsfiddle.net/sKz6y/

+0

您確定地定位錯誤'this' ..在OP代碼 – charlietfl

+0

中的父母('。addonoptions')小提琴也是錯的。 'p'上顯然有一個點擊事件。 –

+0

我的例子的要點是顯示'''''''''''和'''''''''方法之間的區別。我故意留下點擊事件來簡化答案。 –

1

如果$(this)<p>標籤則children()調用將返回一組<div> s。您需要使用jQuery的find方法:

嘗試:

$(this).parents(".addonoptions").find('p').removeClass("highlight"); 

http://api.jquery.com/children/

http://api.jquery.com/find/


<div class="addonoptions"> 
    <div> 
     <p class="clickme">Click to remove highlights</p> 
    </div> 
    <div class="highlight"> 
     <p class="clickme">Click to remove highlights</p> 
    </div> 
</div>​ 

$('.clickme').on('click', function(){ 
    $(this).parents('.addonoptions').children().removeClass('highlight'); 
    $(this).parent().addClass('highlight'); 
});​ 

http://jsfiddle.net/E4K7P/

+0

對不起,div是那些應該高亮去掉的div。我已經修復了我的問題中的html示例以反映這一點。 –

+0

@BryanGentry你最好的辦法是自己調試代碼。找出'$(this)'是什麼,並逐步通過其餘的代碼來找到答案... – xandercoded

+0

$(this)是被單擊的.clickme類的元素。我知道我正在選擇正確的元素,因爲將removeClass更改爲addClass或任何其他方法會應用這些更改。 –