1. 程式人生 > 其它 >tab標籤點選切換不同內容js2種實現方式:利用隱藏條件tabs[i] items[i] 一 一對應順序相同實現、利用setAttribute/getAttribute實現

tab標籤點選切換不同內容js2種實現方式:利用隱藏條件tabs[i] items[i] 一 一對應順序相同實現、利用setAttribute/getAttribute實現

技術標籤:前端# JavaScript

在這裡插入圖片描述

1)優化實現:利用隱藏條件實現

js程式碼:

tab優化版:

  1. 找到所有標籤:tabs
  2. 找到所有內容:items
  3. 點選當前標籤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';
            }
        }