码迷,mamicode.com
首页 > 编程语言 > 详细

javaScript常用工具库

时间:2015-11-25 18:45:15      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

一、类型判断工具库

技术分享
//判断arr是否是一个数组,返回bool值
function isArray(arr){
    return Object.prototype.toString.call(arr)===[object Array];
}

//判断fn是否是一个函数
function isFunction(fn){
    return Object.prototype.toString.call(fn)===[object Function];
}

//判断一个值是否为假值
//js中有大量的假值,包括
//1:0
//2:Nan
//3:‘‘(空字符串)
//4:false
//5:null
//6:undefined
function isFalse(a){
    if(!a){
        return true;
    }
}

//判断是否是邮箱地址
function isEmail(a) {
    var reg=/^([\w_\.\-\+])+\@([\w\-]+\.)+([\w]{2,10})+$/;
    return reg.test(a);
}

//判断是否是电话号码
function isPhoneNumber(a){
    var reg=/^1\d{10}$/;
    return reg.test(a);
}

 
类型判断工具库

二、dom相关工具库(轻量级jquery)

技术分享
//判断元素是否包含某个类
function hasClass(element, className) {
    var oldClass = element.className;
    if (!oldClass) {
        return false;
    }
    var oldClassArr = oldClass.split(/\s+/);
    for (var i = 0, len = oldClass.length; i < len; i++) {
        if (oldClassArr[i] === className) {
            return true;
        }
    }
    return false;
}

//为元素增添一个新样式类
function addClass(element, newClassName) {
    if (hasClass(newClassName)) {
        return;
    }

    element.className = element.className ? [element.className, newClassName].join( ) : newClassName;
}

//移除元素element中的样式oldClassName
function removeClass(element, oldClassName) {
    if (!hasClass(element, oldClassName)) {
        return;
    }
    var oldClassArr = element.className.split(/\s+/);
    for (var i = oldClassName.length - 1; i >= 0; i--) {
        if (oldClassArr[i] === oldClassName) {
            oldClassArr.splice(i, 1);
            break;
        }
    };
    element.className = oldClassArr.join( );
}

//判断siblingNode和element是否为同一个父元素下的同一级的元素,返回bool值
function isSiblingNode(elem, siblingNode) {
    return elem.parentNode === siblingNode.parentNode;
}

//实现一个简单的jquery,可以实现$(‘#adom‘),$(a),$(‘.aclass‘),$(‘[data-log]‘),$(‘[data-time=2015]‘),$(‘#adom .classA‘)
function $(selector) {
    var regExps = {
        id: /^#([\w_\-]+)/,
        className: /^\.([\w_\-]+)/,
        tag: /^\w+$/,
        attribute: /(\w+)?\[([^=\]]+)(?:=(["‘])?([^\]"‘]+)\3?)?\]/
    };
    var queryActions = {
        id: function(id) {
            return document.getElementById(id);
        },
        tag: function(tag) {
            return document.getElementsByTagName(tag);
        },
        className: function(className) {
            var elems = document.getElementsByTagName(*);
            var result = [];
            for (var i = 0, len = elems.length; i < len; i++) {
                if (hasClass(elems[i], className)) {
                    result.push(elems[i]);
                }
            }
            return result;
        },
        attribute: function(tag, key, value) {
            var elems = document.getElementsByTagName(tag || *);
            var result = [];
            for (var i = 0, len = elems.length; i < len; i++) {
                if (elems[i].getAttribute(key)) {
                    if (!value) {
                        result.push(elems[i]);
                    } else if (elems[i].getAttribute(key).toLowerCase() === value.toLowerCase()) {
                        result.push(elems[i]);
                    }
                }
            }
            return result;
        }

    };
    //准备函数以及对应的参数
    function direct(part, actions) {
        var fn, result;
        var params = [];
        if (result = part.match(regExps[id])) {
            fn = id;
            params.push(result[1]);
        }
        if (result = part.match(regExps[tag])) {
            fn = tag,
                params.push(result[0]);
        }
        if (result = part.match(regExps[className])) {
            fn = className,
                params.push(result[1]);
        }
        if (result = part.match(regExps[attribute])) {
            fn = attribute,
                params.push(result[1], result[2], result[4]);
        }
        if (arguments[2]) {
            params.push(arguments[2]);
        }
        var elemResult = actions[fn].apply(null, params);
        return elemResult;
    }

    var parentActions = {
        id: function(idText, parentNode) {
            if (parentNode.getAttribute(id) === idText) {
                return true;
            } else {
                return false;
            }
        },
        className: function(classText, parentNode) {
            if (hasClass(parentNode, classText)) {
                return true;
            } else {
                return false;
            }
        },
        tag: function(tagText, parentNode) {
            if (parentNode.nodeName.toLowerCase() === tagText.toLowerCase()) {
                return true;
            } else {
                return false;
            }
        },
        attribute: function(tag, key, value, parentNode) {
            if (tag) {
                if (parentNode.nodeName.toLowerCase() !== tag.toLowerCase()) {
                    return false;
                }
            }
            if (parent.getAttribute(key)) {
                if (!value) {
                    return true;
                }
                if (parent.getAttribute(key) === value) {
                    return true;
                }
            }
            return false;
        }

    };

    function filterParents(parts, queryArr) {
        var result = [];
        var pText = parts.pop();
        //首先检验当前第一个父元素文本
        for (var i = queryArr.length - 1; i >= 0; i--) {
            var curPNode = queryArr[i].parentNode;
            while (curPNode) {
                if (direct(pText, parentActions, curPNode) === true) {
                    //说明该层匹配成功
                    result.push(queryArr[i]);
                    break;
                }
                curPNode = curPNode.parentNode;
            }

            return result[0] && parts[0] ? filterParents(parts, result) : result;
        };
    }

    //console.log(selector);
    var parts = selector.split(/\s+/);
    //对于非组合的情况应该可以找到
    var selectorLast = parts.pop();
    //根据最后一个元素查找,如果是id查找,那么得到一个元素,其他得到类数组对象
    var queryResult = direct(selectorLast, queryActions);
    //console.log(queryResult);
    //下面这句话,如果是类数组对象,那么转换为一个数组,否则得到的是空数组
    if (queryResult) {
        queryArr = [].slice.call(queryResult);
    }
    //如果根据id查找的,或者查找结果为空,那么直接返回;否则递归过滤父节点(这里默认了不会出现a #test类似的组合)

    return queryArr[0] && parts[0] ? filterParents(parts, queryArr) : queryResult;
}

$.event = {
    //定义这个数组的作用在于,除了删除指定type上绑定的特定listener事件之外,还可以删除指定type上绑定的所有事件
    listeners: []
};

//为元素element绑定event事件的处理函数listener
//1.DOM0级(IE8之前),采用onClick=listener的方式,这种方法的缺点是不能为一个事件绑定多个处理函数
//2.DOM2级别:addEventListener,其作用域是所属元素的作用域
//3.IE:attachEvent,其作用域是全局作用域
$.event.addEvent = function(element, type, listener) {
    type = type.replace(/^on/i, ‘‘).toLowerCase();
    //将作用域this都限制到元素的作用域
    var lis = $.event.listeners;
    var realListener = function(e) {
        listener.call(element, e);
    }
    if (element.addEventListener) {
        element.addEventListener(type, realListener, false);
    } else if (element.attachEvent) {
        element.attachEvent(on + type, realListener);
    } else {
        element[on + type] = realListener;
    }
    $.event.listeners.push([element, type, listener, realListener]);
    //返回元素,便于链式操作
    return element;
};

$.event.removeEvent = function(element, type, listener) {
    type = type.replace(/^on/i, ‘‘).toLowerCase();
    //var isRemoveAll=listener?false:true;
    var isRemoveAll = !listener;
    var lis = $.event.listeners;
    for (var i = 0, len = $.event.listeners.length; i < len; i++) {
        var curLis = lis[i];
        if (curLis[0] === element && curLis[1] === type && (isRemoveAll || curLis[2] === listener)) {
            if (element.removeEventListener) {
                element.removeEventListener(type, curLis[3], false);
            } else if (element.detachEvent) {
                element.detachEvent(on + type, curLis[3]);
            } else {
                element[on + type] = null;
            }
            lis.splice(i,1);
        }
    }
    return element;
};


//完成click事件的绑定
$.event.addClicEvent=function(element,listener){
    $.event.addEvent(element,click,listener);
};

//实现当用户按下enter按键时候的绑定
$.event.addEnterEvent=function(element,listener){
    $.event.addEvent(element,keypress,function(e){
        //IE中event位于全局对象中
        var event=e||window.event;
        var keyCode=event.charCode||event.keyCode;
        if(keyCode===13){
            listener.call(element,event);
        }


    });
};

//实现事件代理功能
//根据冒泡原理,为父元素绑定监听事件
$.event.delegateEvent=function(element,tag,type,listener){
    $.event.addEvent(element,type,function(e){
        var event=e||window.event;
        var target=event.target||event.srcElement;
        if(target&&target.tagName.toLowerCase()===tag.toLowerCase()){
            listener.call(target,event);
        }
    });
};

//进行进一步的封装
$.on=function(selectorText,type,listener){
    $.event.addEvent($(selectorText),type,listener);
};

$.un=function(selectorText,type,listener){
    $.event.removeEvent($(selectorText),type,listener);
};
$.click=function(selectorText,listener){
    $.event.addClicEvent($(selectorText),listener);
};
$.delegate=function(selectorText,tag,type,listener){
    $.event.delegateEvent($(selectorText),tag,type,listener);
};





 
domUtil.js

三、cookie工具库

 

四、ajax工具库

 

javaScript常用工具库

标签:

原文地址:http://www.cnblogs.com/bobodeboke/p/4995136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!