#传统的过程式编写选项卡
![](https://box.kancloud.cn/971edbfca3882141cf46c0fc0292408d_1141x812.png)
```
<style>
#div1 div{ width: 200px; height: 200px; border: 1px #000 solid; display: none; }
.active{ background: red; }
</style>
<script>
window.onload = function(){
var oParent = document.getElementById('div1');
var aInput = oParent.getElementsByTagName('input');
var aDiv = oParent.getElementsByTagName('div');
for(var i=0; i<aInput.length; i++){
aInput[i].index = i;
aInput[i].onclick = function(){
for(var j=0; j<aInput.length; j++){
aInput[j].className = '';
aDiv[j].style.display = 'none';
}
this.className = 'active';
aDiv[this.index].style.display = 'block';
};
}
};
</script>
<div id="div1">
<input class="active" type="button" value="1">
<input type="button" value="2">
<input type="button" value="3">
<div style="display: block;">111</div>
<div>222</div>
<div>333</div>
</div>
```
先变型:
尽量不要出现函数嵌套函数
可以有全局变量
```
var oParent = null;
var aInput = null;
var aDiv = null;
window.onload = function(){
oParent = document.getElementById('div1');
aInput = oParent.getElementsByTagName('input');
aDiv = oParent.getElementsByTagName('div');
for(var i=0; i<aInput.length; i++){
aInput[i].index = i;
aInput[i].onclick = change;
}
};
function change(){
for(var i=0; i<aInput.length; i++){
aInput[i].className = '';
aDiv[i].style.display = 'none';
}
this.className = 'active';
aDiv[this.index].style.display = 'block';
}
```
把onload中不是赋值的语句放到单独的函数中
```
var oParent = null;
var aInput = null;
var aDiv = null;
window.onload = function(){
oParent = document.getElementById('div1');
aInput = oParent.getElementsByTagName('input');
aDiv = oParent.getElementsByTagName('div');
init();
};
function init(){
for(var i=0; i<aInput.length; i++){
aInput[i].index = i;
aInput[i].onclick = change;
}
}
function change(){
for(var j=0; j<aInput.length; j++){
aInput[j].className = '';
aDiv[j].style.display = 'none';
}
this.className = 'active';
aDiv[this.index].style.display = 'block';
}
```
- 01 JS面向对象及组件开发
- 02 传统的过程式编写选项卡
- 03 用面向对象封装通用选项卡
- 04 控制多个选项卡自动播放
- 05 用面向对象编写拖拽
- 06 JS面向对象及组件开发
- 07 hasOwnProperty和constructor的使用
- 08 instanceof运算符的使用
- 09 利用toString做类型判断
- 10 什么是面向对象的继承
- 11 面向对象之拷贝继承
- 12 编写继承的拖拽
- 13 继承的其他形式之类式继承
- 14 继承的其他形式之原型继承
- 15 组件开发是什么
- 16 给拖拽组件配置不同参数
- 17 封装弹框组件
- 18 使用对象标记已弹出弹框
- 19 复杂组件开发之自定义事件
- 20 原生JS实现自定义事件
- 21 自定义事件实例
- 22 基于JQ的选项卡组件开发