1)优化实现:利用隐藏条件实现
js代码:
tab优化版:
- 找到所有标签:tabs
- 找到所有内容:items
- 点击当前标签tabs[i]时:
3.1 先把所有tabs样式类为置空,再把当前tab样式类名置为current
即:所有tabs[i].style.className=’’,再把当前tabs[i].className=‘current’,
3.2 同时:找到对应itemsi:
置item[i].style.display=‘block’,其它置none
// 先 找到所有标签元素
var tabs=document.querySelector('.tab_list').querySelectorAll('li')
// console.log(tabs)
// 再 找到所有内容元素
var items=document.querySelectorAll('.item')
// console.log(items)
for(let i=0; i<items.length; i++){
// 1.点击tab时
tabs[i].onclick=function(){
//先干掉所有
for(let i=0;i<tabs.length;i++){
tabs[i].className='' //所有className设为空
items[i].style.display='none' //把所有item设置为不可见
}
//2.再保留自己
// 当前点的tabs[i](this)设为current,显示当前tab样式
this.className='current' //同tabs[i].className='current'
// 把对应位置的items[i]设置为可见
items[i].style.display='block'
}
}
完整代码
<!DOCTYPE html>
<html lang="ch">
<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>Document</title>
<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>
</head>
<body>
<div class="tab">
<div class="tab_list">
<ul>
<li class="current">商品介绍</li>
<li>规格与包装</li>
<li>售后保障</li>
<li>商品评价(5000)</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"> 商品评价(5000)模块内容 </div>
<div class="item"> 手机社区模块内容 </div>
</div>
</div>
<script>
/*tab优化版:
1.找到所有标签:tabs
2.找到所有内容:items
3.点击当前标签tabs[i]时:
3.1先把所有tabs样式类为置空,再把当前tab样式类名置为current
即:所有tabs[i].style.className='',再把当前tabs[i].className='current',
3.2同时:找到对应items[i](隐藏条件:tabs和items顺序相同即tab[i]=items[i]):
置item[i].style.display='block',其它置none
*/
// 先 找到所有标签元素
var tabs=document.querySelector('.tab_list').querySelectorAll('li')
// console.log(tabs)
// 再 找到所有内容元素
var items=document.querySelectorAll('.item')
// console.log(items)
for(let i=0; i<items.length; i++){
// 1.点击tab时
tabs[i].onclick=function(){
//先干掉所有
for(let i=0;i<tabs.length;i++){
tabs[i].className='' //所有className设为空
items[i].style.display='none' //把所有item设置为不可见
}
//2.再保留自己
// 当前点的tabs[i](this)设为current,显示当前tab样式
this.className='current' //同tabs[i].className='current'
// 把对应位置的items[i]设置为可见
items[i].style.display='block'
}
}
</script>
</body>
</html>
2)原实现:用到setAttribute(‘data-index’,i) getAttribute(‘data-index’]
// 获取元素
var tab_list = document.querySelector('.tab_list');
var lis = tab_list.querySelectorAll('li');
var items = document.querySelectorAll('.item');
// for循环绑定点击事件
for (var i = 0; i < lis.length; i++) {
// 开始给5个小li 设置索引号
lis[i].setAttribute('index', i);
lis[i].onclick = function() {
// 1. 上的模块选项卡,点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式
// 干掉所有人 其余的li清除 class 这个类
for (var i = 0; i < lis.length; i++) {
lis[i].className = '';
}
// 留下我自己
this.className = 'current';
// 2. 下面的显示内容模块
var index = this.getAttribute('index');
console.log(index);
// 干掉所有人 让其余的item 这些div 隐藏
for (var i = 0; i < items.length; i++) {
items[i].style.display = 'none';
}
// 留下我自己 让对应的item 显示出来
items[index].style.display = 'block';
}
}