][2]
首先我想实现的效果是当我点击任何其中一个就给它添加一个class样式,然后当我点击第二个的时候,会把原先第一次点击的class remove掉,以此类推的效果,下面是自己写的jquery代码,但是实现的效果不一样,想明白其中的原理,所以想请教下实现的原理,新人求教,谢谢
实现原理:点击的li添加class,而它的其他兄弟节点删除class即可,代码如下:
$('ul li').click(function(){
$(this).addClass('addclass').siblings('li').removeClass('addclass')
})
看楼主代码的意思,应该是移除不了addclass的
你的if只判断了当前被单击了的li是否有addclass
比如你点击了第一个li,但是原来的addclass可能在第2个li上,但是你的代码只会判断第一个li是否有addclass
不知道明白没,具体实现可以看楼上的同学
$('ul').find("li").click(function(){
$(this).addClass('addclass').siblings('li').removeClass('addclass')
})
这个是最佳写法 !
$('ul li').click(function(){
$(this).addClass('addclass').siblings('li').removeClass('addclass')
})
我也认同这个是最佳答案
jQuery里面
$('ul li').clicl(function(){
...
});
这一句是给所有li标签添加点击事件,里面$(this)是取得当前元素(即当前被点击的li),所以你这一段的代码实现的效果是给被点击的li标签添加和删除'addclass'样式,
$('ul li').click(function(){
_this = $(this);
if(_this.hasClass('addclass')){
return;
}else{
$('addclass').removeClass('addclass');
$(this).addClass('addclass');
}
})
$('ul li').click(function(){
$(this).addClass('addclass').siblings('li').removeClass('addclass')
})
这个答案一般我也是怎么写的
$('ul li').click(function(){
$(this).parent().find('li').removeClass('addclass')
$(this).addClass('addclass');
})
$("ui li").click(function() {
$(".addclass").removeClass("addclass");
$(this).addClass("addclass");
});
============
补充:
回复@dingfangjing88
http://jsperf.com/jquery-style-toggle
这是我创建的jspref
的test。