2010-08-25 30 views
1

我有一個表的結構,類似的東西如何改變類的<a>標籤的jQuery

<table style="width: 100%;"> 
    <tr> 
     <td> 
      <a href="#" class="xx">one</a> 
     </td> 
     <td> 
    </tr> 
    <tr> 
     <td> 
      <a href="#" class="xx">Two</a> 
     </td> 
     <td> 
    </tr> 
    <tr> 
     <td> 
      <a href="#" class="xx">Three</a> 
     </td> 
     <td> 
    </tr> 
</table> 

CSS:

.xx { 
    border: 5px solid green;  
} 

.yy { 
    border: 5px solid red;  
} 

現在我想到的是,如果我點擊第一行/ 1 <a>其邊界將變成紅色,且在<a>休息綠色的,如果我再次clcik在第1行/ 1 <a>應該變成綠色。另外,如果我點擊任何其他<a>那麼只有它應該變爲紅色,但<a>的其餘部分應爲綠色。

我想:

$(function() { 
    $("a.xx").click(function() { 
     if ($(this).hasClass("xx")) { 
      $(this).removeClass("xx").addClass("yy"); 
     } else { 
      $(this).removeClass("yy").addClass("xx"); 
     } 
    }); 
}); 

但它不工作。

+0

檢查錯誤控制檯。你有錯誤嗎?在這裏和那裏放一些alert()或console.log()語句。它打印什麼? – Sjoerd 2010-08-25 18:45:05

+0

剛剛在Firefox瀏覽器中測試 - 我沒有錯誤,代碼工作正常。 – Shamanu4 2010-08-25 18:51:13

回答

3

您需要調整處理了一下,你可以這樣做使用.toggleClass()交換類,像這樣:

$("a.xx").click(function() { 
    $(".yy").not(this).toggleClass("xx yy"); 
    $(this).toggleClass("xx yy"); 
}); 

You can give it a try here.toggleClass()需要用空格分隔多個類,所以只要將2班同時通過。在這種情況下,您想要切換到.yy以及當前點擊的元素。

或者,由於.yy在CSS定義的最後一個(和覆蓋相同的屬性),你只需添加這個類,像這樣:

$("a.xx").click(function() { 
    $(".yy").not(this).removeClass("yy"); 
    $(this).toggleClass("yy"); 
});​ 

You can give it a try here

+0

@Wondering - 啊,你可以通過將'$(「.yy」)'改爲'$(「.yy」)。not(this)'來做到這一點,我會更新答案和演示。 – 2010-08-25 18:56:53

+0

@Wondering - 更新了,現在試試吧:) – 2010-08-25 18:58:35

0

這是因爲你附加處理程序只對a.xx click事件。您還需要一個用於a.yy單擊事件。我會建議是添加另一個類的這些亮點,然後從那裏,像這樣:

<a href="#" class="xx highlight"></a> 

$('a.highlight').click(function({ 
    $('a.xx,a.yy').toggleClass('xx yy'); 
}); 
+0

錯誤。當頁面加載全部''時,元素都有類xx,所以事件被綁定到所有''元素。 – Sjoerd 2010-08-25 18:55:06

+0

不是我的失望,但這會切換所有的行,而不是僅使當前的'.yy'。 – 2010-08-25 18:55:18

0

您的代碼隻字未提轉向其他事情綠色。點擊時需要做兩件事:將所有東西都變成綠色,然後將當前的東西變成紅色。你正在做第二部分,但不是第一部分。

相關問題