封装一个常用的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);
}