我想要完成的只是能够拥有一个无序链接列表,其中单击一个链接,父列表项被赋予“活动”类。在该列表中单击另一个链接后,它会检查是否已分配“活动”,将其从该列表项中删除,并将其添加到最近单击的链接父列表项中。
示例:
第一步 - 用户点击了“我是第二个链接”链接
<ul>
<li><a href="#">I am link one</a></li>
<li class="active"><a href="#">I am link two</a></li>
</ul>
第二步 - 用户现在点击了“我是链接一个”链接
<ul>
<li class="active"><a href="#">I am link one</a></li>
<li><a href="#">I am link two</a></li>
</ul>
很简单,但男人我打败了我。
答案 0 :(得分:10)
假设:UL元素具有类'linksList'。
$('.linksList li a').click(function()
{
$('.linksList li').removeClass('active');
$(this).parent().addClass('active');
});
答案 1 :(得分:7)
像下面这样的东西应该这样做
$(function() {
$('li a').click(function(e) {
e.preventDefault();
var $this = $(this);
$this.closest('ul').children('li').removeClass('active');
$this.parent().addClass('active');
});
});
<强> Working Demo 强>
答案 2 :(得分:1)
这个问题现在有点老了,但我认为仍有改进空间。
“传统”本地事件绑定:
$("ul a").click(function(){
$(this).parent("li").addClass("active")
.siblings().removeClass("active");
# return false to cancel the default action (e.g. follow the link):
return false;
});
现在,通过delegate()使用事件委托(jQuery +1.4.2)。允许您动态添加额外的&gt; li&gt; a,而无需重新绑定事件:
$("ul").delegate("a", "click", function(){
$(this).parent("li").addClass("active")
.siblings().removeClass("active");
# return false to cancel the default action
# and prevent it from bubbling (further) up:
return false;
});
将“ul”更改为仅与所需列表匹配的任何内容,例如: “.linksList”,“#nav”等