仿jQuery中undelegate()方法功能的函数

//跨浏览器事件绑定
function  addEvent(obj,type,fn){
            if(typeof obj.removeEventListener !='undefined'){    /////////////////////////w3c
                //创建一个数组,保存事件
                if(!obj.events) obj.events=[];
                //创建数组,保存方法
                if(!obj.events[type]) obj.events[type]=[];
                //判断数组里是否有数据,有数据检查一下是否有相同的方法
                if(obj.events[type].length>0){
                    if(addEvent.equal(obj.events[type],fn)) {
                        return false;
                    } else {
                        obj.events[type].push(fn);
                    }
                } else {
                    obj.events[type].push(fn);
                }
                obj.addEventListener(type, fn, false);
            } else {        /////////////////////////////////////IE
                //创建一个数组,保存事件
                if(!obj.events) obj.events=[];
                //创建数组,保存方法
                if(!obj.events[type]) obj.events[type]=[];
                //判断数组里是否有数据,有数据检查一下是否有相同的方法
                if(obj.events[type].length>0){
                    if(addEvent.equal(obj.events[type],fn)) {
                        return false;
                    } else {
                        obj.events[type].push(fn);
                    }            
                } else {
                    obj.events[type].push(fn);
                }
                //执行事件处理函数
                var _this=this;
                obj['on'+type]=addEvent.exec;
            } 
    
}

//执行事件处理函数
addEvent.exec=function(event){
            var e =event || window.event;
            var es = this.events[e.type];
            for(var i in es){
                es[i].call(this);
            }
}


//同一个注册函数进行屏蔽
addEvent.equal=function(es,fn){
    for(var i in es){
        if(es[i]==fn){
            return true;
        }
    }
    
    return false;
}

    


//删除事件
function removeEvent(obj,type){

        if(typeof obj.removeEventListener !='undefined'){    ///////////////////////////////////////w3c
            if(type){    //删除指定事件
                    //判断删除的事件是否绑定
                    if(!obj.events[type]) return false;
                    for(var j=0;j<obj.events[type].length;j++){
                        obj.removeEventListener(type,obj.events[type][j], false);
                    }
            } else {        //清除元素所有事件
                        for(var eveName in obj.events){
                                for(var k=0;k<obj.events[eveName].length;k++){
                                    obj.removeEventListener(eveName,obj.events[eveName][k], false);
                                }
                        }
            }
        } else {                /////////////////////////////////////IE
            if(type){            //删除指定事件
                    //判断删除的事件是否绑定
                    if(!obj.events[type]) return false;
                    for(var j=0;j<obj.events[type].length;j++){
                        delete obj.events[type][j];
                    }                        
            } else {            //清除元素所有事件
                    for(var eveName in obj.events){
                            for(var k=0;k<obj.events[eveName].length;k++){
                                delete    obj.events[eveName][k];
                            }
                    }                
            }
        }
    
}
addEvent(btn,'click',function(){
         alert('事件绑定');
});
//删除click事件
removeEvent(btn,'click');
//删除mouseover事件
removeEvent(btn,'mouseover');
//删除所有事件
removeEvent(btn);

没优化函数,函数中有许多重复代码,因为感觉我写函数的思考不是很好,但是又没别的好想法,没有优化了。
如果哪位大鸟有好的思路或想法,请留言,

原文地址:https://www.cnblogs.com/fan-fan/p/3164362.html