选项卡---面向对象
代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } ul, ul li { list-style: none; } #box, #box1 { width: 300px; height: 200px; border: 2px solid #ccc; margin: 50px auto; } #list, #list1 { border-bottom: 2px solid #ccc; display: flex; } #list li, #list1 li { flex: 1; height: 30px; line-height: 30px; text-align: center; border-right: 2px solid #ccc; cursor: pointer; } #list li:last-child, #list1 li:last-child { border-right: none; } .box { height: 168px; display: none; } .active { background: pink; color: #fff; } </style> </head> <body> <div id="box"> <ul id="list"> <li class="active">第一项</li> <li>第五项</li> <li>第十项</li> </ul> <div class="box" style="display: block;">第一项盒子</div> <div class="box">第五项盒子</div> <div class="box">第十项盒子</div> </div> <div id="box1"> <ul id="list1"> <li class="active">第一项</li> <li>第五项</li> <li>第十项</li> </ul> <div class="box" style="display: block;">第一项盒子</div> <div class="box">第五项盒子</div> <div class="box">第十项盒子</div> </div> <script> // 面向过程 // var lis = document.getElementsByTagName('li'); // var boxes = document.getElementsByClassName('box'); // for (var i = 0; i < lis.length; i++) { // lis[i].index = i; // lis[i].onclick = function () { // for (var j = 0; j < lis.length; j++) { // lis[j].className = ''; // boxes[j].style.display = 'none'; // } // this.className = 'active'; // boxes[this.index].style.display = 'block'; // } // } // 面向对象 构造函数+原型创建 // 构造函数中,this就指向该构造函数, 事件函数中,this指向该元素 function Tab(ele) { // 获取元素 私有 留在构造函数中 this.box = document.getElementById(ele); this.lis = this.box.getElementsByTagName('li'); this.boxes = this.box.getElementsByClassName('box'); var that = this; // 将构造函数的this 存在变量that中 for (var i = 0; i < this.lis.length; i++) { this.lis[i].index = i; this.lis[i].onclick = function () { // 在点击事件中,this 谁用他 他指谁 li that.fn(this); // 实参 - 谁用他 他指谁this } } } // 公共 共享 切换tab页面功能部分 放在 prototype原型中 Tab.prototype.fn = function (a) { //形参 // this指向 构造函数tab for (var j = 0; j < this.lis.length; j++) { this.lis[j].className = ''; this.boxes[j].style.display = 'none'; } a.className = 'active'; // this 谁用他 他指谁 this.boxes[a.index].style.display = 'block'; } new Tab('box'); new Tab('box1'); </script> </body> </html>