jQuery实现tab切换
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>jquery的tab切换</title>
<style>
.mod-tab {
border: 1px solid #ccc;
margin-top: 50px;
}
.mod-tab * {
box-sizing: border-box;
}
.mod-tab ul, .mod-tab li {
margin: 0;
padding: 0;
list-style: none;
}
.mod-tab .tabs:after {
content: '';
height: 0;
display: table;
clear: both;
}
.mod-tab .tabs li{
float: left;
width: 33.3%;
height: 30px;
line-height: 30px;
text-align: center;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
cursor: pointer;
}
.mod-tab .tabs li:last-child{
border-right: none;
}
.mod-tab .tabs .active {
background: #eee;
}
.mod-tab .panel {
display: none;
height: 180px;
padding: 20px;
}
.mod-tab .active {
display: block;
}
</style>
</head>
<body>
<div class = "mod-tab">
<ul class = "tabs">
<li class = "active">tab1</li>
<li>tab2</li>
<li>tab3</li>
</ul>
<div class = "panel active">内容1</div>
<div class = "panel">内容2</div>
<div class = "panel">内容3</div>
</div>
<div class = "mod-tab">
<ul class = "tabs">
<li class = "active">tab1</li>
<li>tab2</li>
<li>tab3</li>
</ul>
<div class = "panel active">内容1</div>
<div class = "panel">内容2</div>
<div class = "panel">内容3</div>
</div>
<div class = "mod-tab">
<ul class = "tabs">
<li class = "active">tab1</li>
<li>tab2</li>
<li>tab3</li>
</ul>
<div class = "panel active">内容1</div>
<div class = "panel">内容2</div>
<div class = "panel">内容3</div>
</div>
<script src = "http://apps.bdimg.com/libs/jquery/1.9.1/jquery.js"></script>
<script>
$('.tabs>li').on('click',function(){
//防止函数的重复调用
var $this = $(this)
//获取当前点击元素的下表,index()获取的是当前元素在兄弟元素排行中的顺序
var index = $this.index()
//使触发点击事件的元素添加active,其兄弟元素移除active
$this.addClass('active').siblings().removeClass('active')
//li对应的div的内容展示出来,同时div的兄弟元素不展示内容,移除active
/*一个tab时的代码
$('.panel').eq(index).addClass('active').siblings().removeClass('active')
*/
$this.parents('.mod-tab')
.find('.panel')
.eq(index).addClass('active').siblings().removeClass('active')
})
/*
当存在很多tab的时候,以上代码只能保证第一个tab的效果是实现的,而下面的没有效果。
原因在于$('.panel')选中的是9个div,而index是每个tab的div,所以点击下面的tab,展现的内容还是第一个的。
*/
</script>
</body>
</html>
网友评论