封装一个常用的js工具

封装一个常用的js工具

             * 数组的去重复
             * @param arr
             * @returns {*}
             */
            unique2: function(arr) {
                for(var i = 0; i < arr.length; i++) {
                    for(var j = i + 1; j < arr.length;) {
                        if(arr[j] == arr[i]) {
                            arr.splice(j, 1);
                        } else {
                            j++;
                        }
                    }
                }
                return arr;
            },
            /**
             * 数组去除重复的(根据对象来)
             * @param {Object} ary
             */
            unique3: function(ary) {
                var result = [],
                    hash = {};
                for(var i = 0, elem;
                    (elem = arr[i]) != null; i++) {
                    if(!hash[elem]) {
                        result.push(elem);
                        hash[elem] = true;
                    }
                }
                return result;
            },
            /**
             * 获取数组的下标
             * @param arr
             * @param val
             * @returns {number}
             */
            indexOf: function(arr, val) {
                for(var i = 0; i < arr.length; i++) {
                    if(arr[i] == val) {
                        return i;
                    }
                }
                return -1;
            },
            /**
             * 判断一个元素是否在一个数组中
             * @param arr
             * @param val
             * @returns {boolean}
             */
            contains: function(arr, val) {
                return this.indexOf(arr, val) != -1 ? true : false;
            },
            /**
             * 数组中删除一个元素
             * @param arr
             * @param indexs
             * @returns {*}
             */
            remove: function(arr, indexs) {
                var index = this.indexOf(arr, indexs);
                if(index > -1) {
                    arr.splice(index, 1);
                }
                return arr;
            },
            removeObject: function(arr, item) {
                for(var i = 0; i < arr.length; i++) {
                    var jsonData = arr[i];
                    for(var key in jsonData) {
                        if(jsonData[key] == item) {
                            arr.splice(i, 1);
                        }
                    }
                }
                return arr;
            },
            /**
             * 求数组中最大值
             * @param arr
             * @returns {number|Number}
             */
            arrMax: function(arr) {
                return Math.max.apply(null, arr);
            },
            /**
             * 求数组中最小值
             * @param arr
             * @returns {number|Number}
             */
            arrMin: function(arr) {
                return Math.min.apply(null, arr);
            },
            /**
             * 删除数组元素的方法
             */
            removeAry: function(ary, ele) {
                ary.splice(ary.indexOf(ele), 1);
            },
            /**
             * 将类数组转换为数组的方法
             * @param ary
             * @returns {Array}
             */
            formArray: function(ary) {
                var arr = [];
                if(Array.isArray(ary)) {
                    arr = ary;
                } else {
                    arr = Array.prototype.slice.call(ary);
                };
                return arr;
            },
            /**
             * 判断是不是数组
             * @param {Object} ary
             */
            isArray: function(ary) {
                var objectToStringFn = Object.prototype.toString;
                var arrayToStringResult = objectToStringFn.call([]);
                return function(subject) {
                    return objectToStringFn.call(subject) === arrayToStringResult;
                };
            },
             /**
         *窗体不允许选中
         */
        tm_forbiddenSelect: function() {
            $(document).bind("selectstart", function() {
                return false;
            });
            document.onselectstart = new Function("event.returnValue=false;");
            $("*").css({
                "-moz-user-select": "none"
            });
        },
        /**
         * 窗体允许选中
         */
        tm_autoSelect: function() {
            $(document).bind("selectstart", function() {
                return true;
            });
            document.onselectstart = new Function("event.returnValue=true;");
            $("*").css({
                "-moz-user-select": ""
            });
        },
         /**
         * 获取选中文本
         * @param inputDom
         * @returns {string}
         */
        getSelectedText: function(inputDom) {
            if(document.selection) // IE
            {
                return document.selection.createRange().text;
            } else {
                return inputDom.value.substring(inputDom.selectionStart,
                    inputDom.selectionEnd);
            }
        },
        /**
         * 阻止冒泡事件
         * @param e
         */
        stopBubble: function(e) {
            // 如果提供了事件对象,则这是一个非IE浏览器
            if(e && e.stopPropagation) {
                // 因此它支持W3C的stopPropagation()方法
                e.stopPropagation();
            } else {
                // 否则,我们需要使用IE的方式来取消事件冒泡
                window.event.cancelBubble = true;
            }
        },
        /**
         * 刷新当前页面
         */
        tm_refreash: function() {
            window.location.href = window.location.href;
        },
        /**
         * json对象转换为json字符串
         * @param obj
         * @returns {*}
         */
        jsonToString: function(obj) {
            var THIS = this;
            switch(typeof(obj)) {
                case 'string':
                    return '"' + obj.replace(/(["\\])/g, '\\$1') + '"';
                case 'array':
                    return '[' + obj.map(THIS.jsonToString).join(',') + ']';
                case 'object':
                    if(obj instanceof Array) {
                        var strArr = [];
                        var len = obj.length;
                        for(var i = 0; i < len; i++) {
                            strArr.push(THIS.jsonToString(obj[i]));
                        }
                        return '[' + strArr.join(',') + ']';
                    } else if(obj == null) {
                        return 'null';

                    } else {
                        var string = [];
                        for(var property in obj)
                            string.push(THIS.jsonToString(property) + ':' +
                                THIS.jsonToString(obj[property]));
                        return '{' + string.join(',') + '}';
                    }
                case 'number':
                    return obj;
                case false:
                    return obj;
            }
        },

        /**
         * 获取浏览器url中的参数值
         * @param {Object} name
         */
        getURLParam: function(name) {
            return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)', "ig").exec(location.search) || [, ""])[1].replace(/\+/g, '%20')) || null;
        },
         /**
         * 加密算法
         * @param str
         * @param k
         * @returns {string}
         */
        fencryption: function(str, k) {
            var string = "";
            for(var i = 0; i < str.length; i++) {
                var c = str.charCodeAt(i);
                if(c >= 97 && c <= 122) {
                    c += k % 26;
                    if(c < 97) {
                        c += 26;
                    }
                    if(c > 122) {
                        c -= 26;
                    }
                } else if(c >= 65 && c <= 90) {
                    c += k % 26;
                    if(c < 65) {
                        c += 26;
                    }
                    if(c > 122) {
                        c -= 26;
                    }
                }
                string += String.fromCharCode(c);
            }
            return string;
        },

        /**
         * 解密算法
         * @param str
         * @param n
         * @returns {string}
         */
        dencryption: function(str, n) {
            var string = "";
            var k = parseInt("-" + n);
            for(var i = 0; i < str.length; i++) {
                var c = str.charCodeAt(i);
                if(c >= 97 && c <= 122) {
                    c += k % 26;
                    if(c < 97) {
                        c += 26;
                    }
                    if(c > 122) {
                        c -= 26;
                    }
                } else if(c >= 65 && c <= 90) {
                    c += k % 26;
                    if(c < 65) {
                        c += 26;
                    }
                    if(c > 122) {
                        c -= 26;
                    }
                }
                string += String.fromCharCode(c);
            }
            return string;
        },
        /**
         * 获取十六进制随机颜色
         * @returns {string}
         */
        getRandomColor: function() {
            return '#' + (function(h) {
                return new Array(7 - h.length).join("0") + h;
            })((Math.random() * 0x1000000 << 0).toString(16));
        },
        /**
         * 判断浏览器类型
         * @returns {*}
         */
        tmGetBrowse: function() {
            var sUA = navigator.userAgent;
            //检测IE浏览器
            if((navigator.appName == "Microsoft Internet Explorer")) {
                //检测模拟IE浏览的OPERA。edit at 2006-11-08(ver 0.1.2)
                if(sUA.indexOf('Opera') != -1) {
                    this.browseKernel = 'Presto';
                    if(window.opera && document.childNodes) {
                        return 'Opera 7+';
                    } else {
                        return 'Opera 6-';
                    }
                }
                this.browseKernel = 'Trident';
                if(sUA.indexOf('Maxthon') != -1) {
                    return 'Maxthon';
                }
                if(sUA.indexOf('TencentTraveler') != -1) { //ver 0.1.3
                    return '腾迅TT';
                }
                if(document.getElementById) {
                    return "IE5+";
                } else {
                    return "IE4-";
                }
            }
            //检测Gecko浏览器
            if(sUA.indexOf('Gecko') != -1) {
                this.browseKernel = 'Gecko';
                if(navigator.vendor == "Mozilla") {
                    return "Mozilla";
                }
                if(navigator.vendor == "Firebird") {
                    return "Firebird";
                }
                if(navigator.vendor.indexOf('Google') != -1 || sUA.indexOf('Google') != -1) {
                    return 'Google';
                }
                if(sUA.indexOf('Firefox') != -1) {
                    return 'Firefox';
                }
                return "Gecko";
            }
            //Netscape浏览器
            if(sUA.indexOf('Netscape') != -1) {
                this.browseKernel = 'Gecko';
                if(document.getElementById) {
                    return "Netscape 6+";
                } else {
                    return 'Netscape 5-';
                }
            }
            //检测Safari浏览器
            if(sUA.indexOf('Safari') != -1) {
                this.browseKernel = 'KHTML';
                return 'Safari';
            }
            if(sUA.indexOf('konqueror') != -1) {
                this.browseKernel = 'KHTML';
                return 'Konqueror';
            }
            //目前世界公认浏览网页速度最快的浏览器,但它占用的系统资源也很大。
            if(sUA.indexOf('Opera') != -1) {
                this.browseKernel = 'Presto';
                if(window.opera && document.childNodes) {
                    return 'Opera 7+';
                } else {
                    return 'Opera 6-';
                }
                return 'Opera';
            }
            if((sUA.indexOf('hotjava') != -1) && typeof(navigator.accentColorName) == 'undefined') {
                return 'HotJava';
            }
            if(document.all && document.getElementById && navigator.savePreferences && (sUA.indexOf('netfront') < 0) && navigator.appName != 'Blazer') {
                return 'Escape 5';
            }
            //Konqueror / Safari / OmniWeb 4.5+
            if(navigator.vendor == 'KDE' || (document.childNodes && (!document.all || navigator.accentColorName) && !navigator.taintEnabled)) {
                this.browseKernel = 'KHTML';
                return 'KDE';
            }
            if(navigator.__ice_version) {
                return 'ICEbrowser';
            }
            if(window.ScriptEngine && ScriptEngine().indexOf('InScript') + 1) {
                if(document.createElement) {
                    return 'iCab 3+';
                } else {
                    return 'iCab 2-';
                }
            }
            if(document.layers && !document.classes) {
                return 'Omniweb 4.2-';
            }
            if(document.layers && !navigator.mimeTypes['*']) {
                return 'Escape 4';
            }
            if(navigator.appName.indexOf('WebTV') + 1) {
                return 'WebTV';
            }
            if(sUA.indexOf('netgem') != -1) {
                return 'Netgem NetBox';
            }
            if(sUA.indexOf('opentv') != -1) {
                return 'OpenTV';
            }
            if(sUA.indexOf('ipanel') != -1) {
                return 'iPanel MicroBrowser';
            }
            if(document.getElementById && !document.childNodes) {
                return 'Clue browser';
            }
            if(document.getElementById && ((sUA.indexOf('netfront') != -1) || navigator.appName == 'Blazer')) {
                return 'NetFront 3+';
            }
            if((sUA.indexOf('msie') + 1) && window.ActiveXObject) {
                return 'Pocket Internet Explorer';
            }
            return "Unknown";
        },
        /**
         * 判断浏览器类型及版本,如果是IE下面要转移到页面中
         */
        isBrowser: function() {
            return new BROWSER();
        },

        ///////////////////////////////常见的正则判断js开始///////////////////////////////////////////////
        //使用方法:regRule['email'].test(val) 返回true或false
        regRule: {
            email: function(email) {
                var reg = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;
                return reg.test(email);
            },
            userName: function(str) {
                var reg = /^[a-z0-9_-]{3,16}$/; //用户名
                return reg.test(str);
            },
            chineseName: function(str) {
                var reg = /^[\u4E00-\u9FA5]{2,4}$/; //中文姓名
                return reg.test(str);
            },
            mobile: function(str) {
                var reg = /^0?1[3|4|5|7|8][0-9]\d{8}$/; //手机
                return reg.test(str);
            },
            tel: function(str) {
                var reg = /^0[\d]{2,3}-[\d]{7,8}$/; //固话
                return reg.test(str);
            },
            idCard: function(str) {
                var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; //身份证
                return reg.test(str);
            },
            amount: function(str) {
                var reg = /^([1-9][\d]{0,10}|0)(\.[\d]{1,2})?$/; //金额(10位整数2位小数)
                return reg.test(str);
            },
            positiveInt: function(str) {
                var reg = /^[1-9]*[1-9][0-9]*$/; //正整数
                return reg.test(str);
            },
            int: function(str) {
                var reg = /^-?\d+$/; //整数(不限位数)
                return reg.test(str);
            },
            bankCard: function(str) {
                var reg = /^\d{16}|\d{19}$/; //16位或19位银行卡或信用卡号(先把空格replace为空串)
                return reg.test(str);
            },
            chinese: function(str) {
                var reg = /[\u4e00-\u9fa5]/g; //判断是不是中文
                return reg.test(str);
            },
            noChinese: function(str) {
                var reg = /[^\u4e00-\u9fa5]/g; //判断不是中文
                return reg.test(str);
            },
            decimalNumber: function(str) {
                var reg = /^\d+(\.\d+)+$/; //判断带小数的数字
                return reg.test(new Number(str));
            },
            ip: function(str) {
                var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/;
                return reg.test(str);
            }

猜你喜欢

转载自blog.csdn.net/gs981600308/article/details/84943452
今日推荐