原生js,从面向过程的方法到面向对象的方法,写个选项卡练练手

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>js制作一个选项卡</title>
 6         <style type="text/css">
 7             .tab_title span.active {
 8                 background:#000;
 9                 color: #FFF;
10             }
11             .tab_content {
12                 border:1px solid #000;
13                 padding: 20px;
14             }
15             .tab_content div {
16                 display: none;
17             }
18             .tab_content div.active {
19                 display: block;
20             }
21         </style>
22         
23         <script type="text/javascript">
24             //1.选取到tab选项卡 2.为选项卡添加事件
25             window.onload = function(){
26                 var arr_tab_span = document.getElementsByTagName('span');
27                 var tab_section = document.getElementById('sec_con');
28                 var arr_tab_div = tab_section.getElementsByTagName('div');
29                 
30                 //console.log(arr_tab_span);
31                 //console.log(tab_section);
32                 //console.log(arr_tab_div);
33                 
34                 for (var i=0; i<arr_tab_span.length;i++) {
35                     arr_tab_span[i].index = i;
36                     arr_tab_span[i].onclick = function(){ //为选项卡点击添加事件
37                         for(var j=0;j<arr_tab_span.length;j++){
38                             arr_tab_span[j].className = '';
39                             arr_tab_div[j].className = '';
40                         }//for结束
41                         this.className = 'active';
42                         arr_tab_div[this.index].className = 'active';
43                         
44                     }
45                 }//for结束
46             }
47         </script>
48         
49     </head>
50     <body>
51         <div style="width: 500px;">
52             <nav class="tab_title">
53                 <span class="active">语文</span>
54                 <span>数学</span>
55                 <span>娱乐</span>
56             </nav>
57             <section class="tab_content" id="sec_con">
58                 <div class="active">
59                     鲁迅是语文课本上的
60                 </div>
61                 <div>
62                     祖冲之是数学课上的
63                 </div>
64                 <div>
65                     孙悟空是娱乐电视里的
66                 </div>
67             </section>            
68         </div>        
69     </body>
70 </html>

代码效果如下

现在对JS代码进行改造,添加全局变量,函数不要嵌套,变成了如下,亦可用

 1         <script type="text/javascript">
 2             //1.选取到tab选项卡 2.为选项卡添加事件
 3             var arr_tab_span,
 4                 tab_section,
 5                 arr_tab_div;
 6             window.onload = function() {        
 7                 init();
 8             }
 9             
10             function init(){
11                 arr_tab_span = document.getElementsByTagName('span');
12                 tab_section = document.getElementById('sec_con');
13                 arr_tab_div = tab_section.getElementsByTagName('div');
14                 
15                 for(var i = 0; i < arr_tab_span.length; i++) {
16                     arr_tab_span[i].index = i;
17                     arr_tab_span[i].onclick = change;
18                 } //for结束                
19             }
20             
21             function change() { //为选项卡点击添加事件
22                 for(var j = 0; j < arr_tab_span.length; j++) {
23                     arr_tab_span[j].className = '';
24                     arr_tab_div[j].className = '';
25                 } //for结束
26                 this.className = 'active';
27                 arr_tab_div[this.index].className = 'active';
28             }
29             
30         </script>

 继续改造,js代码变成如下,面向对象的方式,即可成功运行

 1         <script type="text/javascript">
 2             window.onload = function() {
 3                 var tab1 = new Tab();
 4                 tab1.init();
 5             }
 6             
 7             function Tab(){
 8                 this.arr_tab_span = document.getElementsByTagName('span');
 9                 this.tab_section = document.getElementById('sec_con');
10                 this.arr_tab_div = this.tab_section.getElementsByTagName('div');                
11             }
12             
13             Tab.prototype.init = function(){
14                 for(var i = 0; i < this.arr_tab_span.length; i++) {
15                     var _this = this;
16                     this.arr_tab_span[i].index = i;
17                     //this.arr_tab_span[i].index = i;
18                     this.arr_tab_span[i].onclick = function(){
19                         _this.change(this);
20                     }
21                 } //for结束                
22             }
23             
24             Tab.prototype.change = function(obj) {
25                 //console.log(this);
26                 //为选项卡点击添加事件
27                 for(var j = 0; j < this.arr_tab_span.length; j++) {
28                     this.arr_tab_span[j].className = '';
29                     this.arr_tab_div[j].className = '';
30                 } //for结束
31                 obj.className = 'active';
32                 this.arr_tab_div[obj.index].className = 'active';
33             }
34             
35         </script>
36         

 

posted @ 2018-10-10 17:52  html55  阅读(637)  评论(0编辑  收藏  举报