手撸 jQuery源码:原型上的方法(完整版)

dQuery.extend({
            //判断方法
    isFunction : function(sel){
        return typeof sel === "function";
    },
    //封装判断字符串和代码片段的方法
    isString : function(str){
        return typeof str === "string";
    },
    isHtml : function(str){
        return str.charAt(0) == "<" && 
        str.charAt(str.length-1) == ">" &&
        str.length >=3
    },
    //封装判断对象 数组 window的方法
    isObject : function(sel){
        return typeof sel === "object"
    },
    isWindow : function (sel){
        return sel === window;
    },
    isArray : function(sel){
        if(dQuery.isObject(sel)&&
            !dQuery.isWindow(sel)&&
            "length" in sel){
                return true;
            }
        return false;
    },
    //去除传入字符串的空格
    trim : function (str){
        if(!dQuery.isString(str)){
            return str;
        }
        if(str.trim){
            return str.trim();
        }else{
            return str.replace(/^\s+|\s+$/g,"")
        }
    },
    //函数处理
    ready : function(fn){
        //判断DOM是否加载完毕
        if(document.readyState == "complete"){
            fn();
        }
        else if(document.addEventListener){   //高级浏览器
            document.addEventListener("DOMContentLoaded",function(){
                fn();
            })
        }
        else{            //lowB浏览器
            document.attachEvent("onreadystatechange",function(){
                if(document.readyState == "complete"){
                    fn();
                }
            })
        }
    },
    each:function(obj,fn){
        //真数组
        if(dQuery.isArray(obj)){
            for(var i=0;i < obj.length;i++){
                //fn(i,obj[i]);   //回调函数
                var res = fn.call(obj[i],i,obj[i]);       //使this指向value
                if(res === true){                          //根据布尔值决定是否跳出循环
                    continue;
                }else if(res === false){
                    break;
                }
            }
        }
        //伪数组
        else if(dQuery.isObject(obj)){
            for(var key in obj ){
                //fn(key,obj[key]);
                var res = fn.call(obj[key],key,obj[key]);
                if(res === true){
                    continue;
                }else if(res === false){
                    break;
                }
            }
        }
    },
    map:function(obj,fn){
        var res = [];   //map中的返回值res
        //是否是数组
        if(dQuery.isArray(obj)){
            for(var i=0;i < obj.length;i++){
                var temp = fn(obj[i],i);  //执行回调函数,结果赋值给temp
                if(temp){              //jQuery中回调函数有值的时候,才执行此操作,否则结果为空,若不加此判断,就会是undefined
                    res.push(temp);
                }
            }
        }
        //是否是对象
        else if(dQuery.isObject(obj)){
            for(var key in obj ){
                var temp = fn(obj[key],key);
                if(temp){
                    res.push(temp);
                }
            }
        }
        return res;
    },
    //兼容获取元素属性的方法:
    getStyle:function(dom,styleName){
        if(window.getComputedStyle){
            return window.getComputedStyle(dom)[styleName];
        }else{
            return dom.currentStyle[styleName];  //ie
        }
    },
    //兼容添加事件:
    addEvent:function(dom,name,callBack){
        if(dom.addEventListener){
            dom.addEventListener(name,callBack);
        }else{
            dom.attachEvent("on"+name,callBack);
        }
    }

    })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值