经典tab栏切换案例
基础样式html模块:
<div class="tab">
<div class="tab_list">
<ul>
<li class="current">商品介绍</li>
<li>规格与包装</li>
<li>售后保障</li>
<li>商品评价</li>
<li>手机社区</li>
</ul>
</div>
<div class="tab_con">
<div class="item" style="display: block;">
商品介绍模块内容
</div>
<div class="item">
规格与包装模块内容
</div>
<div class="item">
售后保障模块内容
</div>
<div class="item">
商品评价模块内容
</div>
<div class="item">
手机社区模块内容
</div>
</div>
</div>
基础样式css模块:
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
.tab {
width: 978px;
margin: 100px auto;
}
.tab_list {
height: 39px;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
.tab_list li {
float: left;
height: 39px;
line-height: 39px;
padding: 0 20px;
text-align: center;
cursor: pointer;
}
.tab_list .current {
background-color: #c81623;
color: #fff;
}
.item_info {
padding: 20px 0 0 20px;
}
.item {
display: none;
}
</style>
结构图片:
要求:通过点击小li切换li的样式和对应div内容的显示与隐藏
难点:需要用到两次排他思想,先移除所有类再添加需要的类
上js代码:
var lis = document.querySelectorAll('li');
var items = document.querySelectorAll('.item')
for (var i = 0; i < lis.length; i++) {
lis[i].setAttribute('data-index', i)
lis[i].onclick = function () {
for (var i = 0; i < lis.length; i++) {
lis[i].className = ''
}
this.className = 'current'
var index = this.getAttribute('data-index')
for (var j = 0; j < items.length; j++)
{
items[j].style.display = 'none'
}
items[index].style.display = 'block'
}
}
以上的js代码更容易看懂,基于以上代码可做一次优化,代码如下:
<script>
var lis = document.querySelectorAll('li');
var items = document.querySelectorAll('.item')
for (var i = 0; i < lis.length; i++) {
// 1.给每一个标题li添加自定义属性
lis[i].index = i
// 2.绑定事件
lis[i].onclick = function () {
for (var i = 0; i < lis.length; i++) {
lis[i].classList.remove('current')
items[i].style.display = 'none'
}
this.classList.add('current')
var index = this.index
items[index].style.display = 'block'
}
}
</script>
总结:本题难点主要是围绕元素排它、删除与添加、div对应的显示与隐藏; 如何通过li的下标找到对应div块,对其进行操作,就是精华所在。