浅谈工作中如何规避思维定式

有朋友工作中遇到一些问题,让帮忙处理下,分析后,发现其实并不是技术问题,而是思考问题的方式产生了思维定式,下面事例浅谈如何规避:

朋友的问题:实现多个div 绑定点击事件 事件为被点击div增加指定class,同时其余div移除此class,前提是不允许使用jQuery。
当然,jQuery操作起来非常简单,addClass/removeClass 秒秒钟的事情,具体为什么不让用jQuery也无需考究,遇到这种问题,明白jQuery原理的都知道原生JS肯定可以解决的,jQuery集成了很多的函数成库,就是为了方便对DOM的操作,在上述情况下,其实可以转换思路,自己去模仿jQuery的某些方法,来有效的完成原生JS方案,以下具体代码实现:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>click div, with adding active class and removing siblings active class</title>
    <style>
        div{
            width:100%;
            height:100px;
            background:#eee;
            border:1px solid #ff0;
        }
        .active{
            background:#f00;
        }

    </style>
</head>
<body>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <script>

        var div=document.getElementsByTagName("div");
        for(var i= 0;i<div.length;i++){
            (function(i){div[i].onclick=function(){
                removeAllClass(div,'active');
                addClass(div[i],'active');
            }})(i)
        }
        function removeAllClass(obj,cls){
            for(var i= 0;i<obj.length;i++){
                removeClass(div[i],cls)
            }
        }
        function hasClass(obj, cls) {
            return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
        }

        function addClass(obj, cls) {
            if (!this.hasClass(obj, cls)) obj.className += " " + cls;
        }

        function removeClass(obj, cls) {
            if (hasClass(obj, cls)) {
                var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
                obj.className = obj.className.replace(reg, ' ');
            }
        }

    </script>
</body>
</html>

总结

1,多角度思考问题,避免思维壁垒
2,多去查看jQuery源码,学习其优秀的构造思想
3,解决问题,首先先做出个解决方案,再去考虑实现功能的最优解决方案
4,给同类元素添加事件,jQuery自带轮寻功能,如果需要原生去些,for循环内部函数自调的方式保护变量i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值