tab標籤點選切換不同內容js2種實現方式:利用隱藏條件tabs[i] items[i] 一 一對應順序相同實現、利用setAttribute/getAttribute實現
阿新 • • 發佈:2021-01-02
技術標籤:前端# JavaScript
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>商品評價(50000)</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">
商品評價(50000)模組內容
</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';
}
}