这里:
demo with comments
在这里,我们使用被点击的li 的.index() 编号 - 打开其:eq() 等于此.index() 的TAB。
看看这个表:
Before你有这个:
li index ---> .slide index
_____________________________________
Action | 0 ---> Action | 0
Comedy | 1 ---> Comedy | 1
Drama | 2 ---> Drama | 2
Docume. | 3 ---> Docume.| 3
每个li 都很好地打开了他各自的标签.slide。
但是你决定添加一个元素.all 来打开你所有的标签,
但现在你有了这个:
li index ---> .slide index
_____________________________________
All | 0 (OPEN ALL)
Action | 1 ---> Action | 0
Comedy | 2 ---> Comedy | 1
Drama | 3 ---> Drama | 2
Docume. | 4 ---> Docume.| 3
如您所见,.all 没有打开他特定的“兄弟”标签。它只需要打开所有标签!
但是,添加这个“额外的”li 元素,您已经将其他 li 元素的索引号“移动”了 1 个。
现在点击 li Drama ,现在有了索引 3 ,它将打开具有相同索引的 TAB。但那是包含 纪录片 电影的 TAB!因为它仍然有索引号 3!
要解决这个新问题,您必须搜索具有 THIS 索引号但为 -1 的选项卡。
( 戏剧 index(3)-1 = 打开戏剧标签 index(2) )
$('ul.nav li').click(function() {
var i = $(this).index()-1;
$('.slide:eq('+i+')').fadeIn(400);
});
考虑到这一点,您只需使用 jQuery :visible 选择器 .fadeOut() 所有以前打开的选项卡。例如:
$('.slide:visible').fadeOut(400);
这将防止您的脚本干扰所有其他.slide。
这是你的脚本:
$('.slide').css({position:'relative',display:'block'});
$('ul.nav li').click(function() {
$(this).addClass('btnSelect').siblings().removeClass('btnSelect');
if( $(this).hasClass('all') ){
$('.slide:visible').fadeOut(400,function(){
$('.slide').fadeIn(400);
$('.grid ul li:nth-child(1)').show();
});
return;
}
var i = $(this).index()-1;
$('.slide:visible').fadeOut(400,function(){
$('.slide:eq('+i+')').fadeIn(400);
$('.grid ul li:nth-child(1)').hide();
});
});
您也可以使用:$('.slide').eq(i).fadeIn(400); 看起来更漂亮! :)