2010-10-19 88 views
14

我正在使用以下jQuery來更改無序列表中元素的類。它似乎並不是達到效果的最有效方式。有沒有更好的方法來寫這個?在父/兄弟/孩子上的jQuery removeClass

$(function() { 
    $('nav li a').click(function() { 
     $(this).parent().siblings().children().removeClass('active'); 
     $(this).addClass('active'); 
    }); 
}); 

感謝

小號

回答

38

它通常是在這些情況下,簡單的處理程序連接到<li>,讓來自<a>點擊bubble up(默認情況下發生)。然後,您的處理程序是這樣的:

$(function() { 
    $('nav li').click(function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
    }); 
}); 

然後在你的CSS,你只是佔active正對<li>,就像這樣:

li.active a { color: red; } 

順便說一句,如果你有很多<li>元素,你」會想用.delegate()這樣的:

$('nav').delegate('li', 'click', function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 
+0

完美!謝謝 - 代表正是我所期待的。 – simonyoung 2010-10-19 21:39:20

5

還要注意的是,如果你想刪除'active'回回M非常this所有元素,那麼你可以逃脫作爲

$('.active').removeClass('active'); 
$(this).addClass('active'); 

這樣簡單的事情,這應該通過樹很容易地傳播。不過,如果DOM數量衆多,我可以看到它在性能上令人頭痛。

0

我上面的代碼中使用,它是工作

我用我的代碼

enter code here : function addnewStepsUpper(){ 
jQuery('.hide_upper_clone_class').clone().insertAfter(".upper_clone_class1"); 
jQuery('.upper_clone_class1').siblings().removeClass('hide_upper_clone_class'); 

}

感謝 維沙爾Sanwar

相關問題