将面向过程的选项卡改为面向对象的选项卡(接上一篇博客)

面向过程-选项卡代码

<!DOCTYPE html>
<html lang="en">
<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>选项卡</title>
    <style>
        #div1 input {background:#CCC;}
        #div1 div {width:200px; height:200px; background:#CCC; display:none;}
        #div1 .active {background:yellow;}
        #div1 .kin {background:red;}
    </style>
    <script>
        window.onload = function() {
            var oDiv = document.getElementById('div1');
            var aBtn = oDiv.getElementsByTagName('input');
            var aDiv = oDiv.getElementsByTagName('div');
            var i = 0;

            for(i = 0; i < aBtn.length; i++){
                // index 属性可返回标签的索引位置
                aBtn[i].index = i;
                //测试i的索引位置
                // alert(i); 

                // 给onclick事件添加自定义方法
                aBtn[i].onclick = function() {
                    for(i = 0; i < aBtn.length; i++){
                        // 给未点击的按钮添加class="kin"
                        aBtn[i].className = 'kin';
                        // 给当前Div的class添加style="display:none"
                        aDiv[i].style.display = 'none';
                    }
                    // 鼠标点击那个按钮就给那个添加class="active"
                    this.className = 'active';
                    // 给当前的class添加style="display:block"
                    aDiv[this.index].style.display = 'block';
                };
            }
        };
    </script>
</head>
<body>
<div id="div1">
    <input type="button" value="txt1" class="active" />
    <input type="button" value="txt2" />
    <input type="button" value="txt3" />
    <div style="display:block;">txt1content</div>
    <div>txt2content</div>
    <div>txt3content</div>
</div>
</body>
</html>

1.首先将函数内的嵌套函数都单独出来

<script>
    var aBtn = null;
    var aDiv = null;

    window.onload = function () {
        var oDiv = document.getElementById('container');
        aBtn = oDiv.getElementsByTagName('input');
        aDiv = oDiv.getElementsByTagName('div');
        var i = 0;

        for(i = 0; i < aBtn.length; i++) {
            aBtn[i].index = i;
            aBtn[i].onclick = tab;
        }
    };
        function tab() {
                for(i =0; i < aBtn.length; i++) {
                    aBtn[i].className = 'kin';
                    aDiv[i].style.display = 'none';
                }
                this.className = 'active';
                aDiv[this.index].style.display = 'block';
            };
</script>

 2.然后把window.onload改为构造函数

<script>
    var aBtn = null;
    var aDiv = null;

    window.onload = function() {
        var oTab = TabSwitch('container');
    }

    function TabSwitch(id) {
        var oDiv = document.getElementById(id);
        aBtn = oDiv.getElementsByTagName('input');
        aDiv = oDiv.getElementsByTagName('div');
        var i = 0;

        for(i = 0; i < aBtn.length; i++) {
            aBtn[i].index = i;
            aBtn[i].onclick = tab;
        }
    };
  function tab() {
       for(i =0; i < aBtn.length; i++) {
         aBtn[i].className = 'kin';
          aDiv[i].style.display = 'none';
       }
       this.className = 'active';
       aDiv[this.index].style.display = 'block'; };
</script>

 3.最后变量改为属性,函数改为方法

<script>
    window.onload = function() {
        var oTab = new TabSwitch('container');
    };

    function TabSwitch(id) {
        var oDiv = document.getElementById(id);
        this.aBtn = oDiv.getElementsByTagName('input');
        this.aDiv = oDiv.getElementsByTagName('div');
        var i = 0;
        var _this = this;

        for(i = 0; i < this.aBtn.length; i++) {
            this.aBtn[i].index = i;
            this.aBtn[i].onclick = function () {
                _this.tab(this);
            };
        }
    };
    TabSwitch.prototype.tab = function (oBtn) {
        for(i =0; i < this.aBtn.length; i++) {
            this.aBtn[i].className = 'kin';
            this.aDiv[i].style.display = 'none';
        }
        oBtn.className = 'active';
        this.aDiv[oBtn.index].style.display = 'block';
    };
    </script>

最终代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选项卡</title>
    <style>
        #container .active {
            background-color: green;
        }
        #container .kin {
            background-color: red;
        }
        #container div {
            display: none;
            width: 300px;
            height: 300px;
            background-color: #ccc;
        }
    </style>

    <script>
    window.onload = function() {
        var oTab = new TabSwitch('container');
    };

    function TabSwitch(id) {
        var oDiv = document.getElementById(id);
        this.aBtn = oDiv.getElementsByTagName('input');
        this.aDiv = oDiv.getElementsByTagName('div');
        var i = 0;
        var _this = this;

        for(i = 0; i < this.aBtn.length; i++) {
            this.aBtn[i].index = i;
            this.aBtn[i].onclick = function () {
                _this.tab(this);
            };
        }
    };
    TabSwitch.prototype.tab = function (oBtn) {
        for(i =0; i < this.aBtn.length; i++) {
            this.aBtn[i].className = 'kin';
            this.aDiv[i].style.display = 'none';
        }
        oBtn.className = 'active';
        this.aDiv[oBtn.index].style.display = 'block';
    };
    </script>
</head>
<body>
    <div id="container">
        <input type="button" value="text1">
        <input type="button" value="text2">
        <input type="button" value="text3">
        <div style="display: block;">text1container</div>
        <div>text2container</div>
        <div>text3container</div>
    </div>
</body>
</html>

 

转载于:https://www.cnblogs.com/kinblog/p/10788567.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值