2011-07-25 68 views
2

我有以下HTML:刪除所選類的jQuery

<a href="#">img/a.jpg</a> 
<a href="#">img/b.jpg</a> 
<a href="#">img/c.jpg</a> 

對於選定的鏈接我有以下幾點:

$(function() { 
      $("a").click(function() 
      { 
      var current = $(this); 
      var name = current.attr('href'); 
      current.addClass("selected"); 
      var prev = current.closest("a").find("a.selected"); 
      prev.removeClass("selected"); 
       return false; 
      }); 
     }); 

的問題是,當我點擊一些鏈接前面我點擊的一個不會取消選擇(刪除選擇的類)。任何幫助將不勝感激。

回答

4

您可以刪除所有具有所選類別的元素,然後將所選類別應用於當前類別。

$("a").click(function({ 
    var current = $(this); 
    var name = current.attr('href'); 

    //Remove all 
    $('.selected').removeClass('selected'); 

    //Add to current 
    current.addClass("selected"); 

    return false; 
}); 
4

你可以這樣做:

$(function() { 
      $("a").click(function() 
      { 
      var current = $(this); 
      var name = current.attr('href'); 
      $('a.selected').removeClass('selected'); 
      current.addClass("selected"); 

       return false; 
      }); 
     }); 

最接近你的例子,因爲它上升DOM樹不起作用

+0

它不僅上升(如'.parent()'),它以自身開始。因此,「prev」元素將始終使用'.closest()'調用本身(至少在它到達'.find()'後纔會發現沒有匹配並失敗)。 –

1

我會嘗試以下方法:

$(function() { 
    $("a").click(function() { 

     //GEt the current element 
     var current = $(this); 
     var name = current.attr("href"); 

     //Remove the class from the previous element 
     $('.selected').removeClass("selected"); 

     //Add the class to the current element 
     current.addClass("selected"); 

     //Let's get back to work! 
     return false; 

    }) 
} 
1

您的使用.closest不正確我不這麼認爲。請記住,.closest看起來自己然後在樹上進行比賽。因此,就你的情況而言,它首先發現自己,然後查看(內部)自己以應用所選類的錨點。 (當我閱讀它時,你的代碼應該是應用並從本身刪除選定的類。)

您可能想嘗試使用.siblings。這就是說,我會建議the following代替:

$('a').click(function(e){ 
    // store the current anchor 
    var $a = $(this); 

    // add the selected class to this element 
    $a.addClass('selected'); 

    // look around to links nearby, with the selected class, and remove that class 
    $a.siblings('a.selected').removeClass('selected'); 

    // prevent further action 
    e.preventDefault(); return false; 
}); 

我覺得使用通用$('a.selected')$('.selected')過於寬泛,可能會抓住你不想讓頁面上的鏈接。我可能是錯的,但這會將它保留在頁面的當前導航部分內(至少在所有這些錨點都在同一個容器內)。