常用Common.js工具库备份
/**
* @Date: 2017-01-08 15:26:37
* @Last Modified time: 2017-01-08 16:16:59
* @file name: common.js
* @desc 对原生JS对象的扩展
* Object、Array、String、Date、Ajax、Cookie
*/
'use strict';;
(function() {
Object.extend = function(targetObj, fnJson) {
for (var fnName in fnJson) {
targetObj[fnName] = fnJson[fnName];
}
return targetObj;
};
/**
* 对Object的扩展
*/
Object.extend(Object.prototype, {
values: function() { // 一个静态方法, 传入一个对象, 返回该对象中所有属性所对应的值, 构成数组返回
var values = [];
for (var property in this) values.push(this[property]); // 将每个属性的值压入到一个数组中
return values;
},
clone: function(object) { // 一个静态方法, 传入一个对象, 克隆一个新对象并返回
return Object.extend({}, object);
},
getType: function() {
return Object.prototype.toString.call(this).match(/\[object (.*?)\]/)[1].toLowerCase();
},
toJson: function() {
return JSON.stringify(this);
},
serialize: function() {
if (JSON.parse)
return JSON.parse(this);
switch (this.constructor) {
case Object:
var str = "{";
for (var o in obj) {
str += '"' + o + '"' + ":" + Serialize(obj[o]) + ",";
}
if (str.substr(str.length - 1) == ",")
str = str.substr(0, str.length - 1);
return str + "}";
break;
case Array:
var str = "{";
if (str.substr(str.length - 1) == ",") {
str = str.substr(0, str.length - 1);
}
for (var o in obj) {
str += '"' + o + '"' + ":" + Serialize(obj[o]) + ",";
}
return str + "}";
break;
case Boolean:
return "\"" + obj.toString() + "\"";
break;
case Date:
return "\"" + obj.toString() + "\"";
break;
case Function:
break;
case Number:
return "\"" + obj.toString() + "\"";
break;
case String:
return "\"" + obj.toString() + "\"";
break;
}
}
});
/**
* 对Array的扩展
*/
Object.extend(Array.prototype, {
clear: function() {
this.length = 0;
return this;
},
lastIndexOfArr: function(obj) {
if (this.lastIndexOf(obj)) {
return this.lastIndexOf(obj);
} else {
this.reverse();
return this.length - 1 - this.indexOfArr(obj);
}
},
contain: function(obj) {
return this.indexOfArr(obj) > -1;
},
insertAt: function(index, obj) {
this.splice(index, 0, obj);
return this;
},
removeAt: function(index) {
this.splice(index, 1);
return this;
},
first: function() {
return this[0];
},
indexOfArr: function(obj) {
//如果浏览器支持原生的indexOf,则调用原生的方法
if (this.indexOf) {
return this.indexOf(obj);
} else {
var i = 0;
len = this.length;
for (i; i < len; i++) {
if (this[i] == obj)
return i;
return -1;
}
}
},
last: function() {
return this[this.length - 1];
},
distinct: function() {
this.sort();
var res = [this[0]];
for (var i = 1; i < this.length; i++) {
if (this[i] !== res[res.length - 1]) {
res.push(this[i]);
}
}
return res;
},
sumNum: function() {
if (this.reduce) {
return this.reduce(function(partial, value) {
return partial + value;
})
} else {
return eval(arr.join('+'));
}
},
sortNumAsc: function() {
this.sort(function(a, b) {
return a - b;
});
return this;
},
sortNumDesc: function() {
this.sort(function(a, b) {
return b - a;
});
return this;
},
maxNum: function() {
return this.sortNumAsc()[this.length - 1];
},
minNum: function() {
return this.sortNumAsc()[0];
},
toUpperCase: function() {
if (this.map) {
return this.map.call(this, function(elem) {
return elem.toUpperCase();
})
} else {
return this.toLocaleString().toUpperCase().split(',');
}
},
toLowerCase: function() {
if (this.map) {
return this.map.call(this, function(elem) {
return elem.toLowerCase();
})
} else {
return this.toLocaleString().toLowerCase().split(',');
}
}
})
/**
* 对String的扩展
*/
Object.extend(String.prototype, {
/*
*使用示例如下
*var s = String.format("S{0}T{1}","n","e");//结果:SnTe
*/
format: function() {
var res = arguments[0];
for (var i = 0, len = arguments.length - 1; i < len; i++) {
var b = new Regexp("\\{" + i + "\\", "gm");
res = res.replace(b, arguments[i + 1]);
}
return res;
},
append: function(str) {
return this.concat(str);
},
leftpad: function(len, str) {
if (arguments.length === 1) str = '0';
var res = new StringBuilder();
for (var i = 0, c = len - this.length; i < c; i++) {
res.append(str);
}
res.append(this);
return res.toString();
},
rightpad: function(len, str) {
if (arguments.length === 1) str = '0';
var res = new StringBuilder();
res.append(this);
for (var i = 0, c = len - this.length; i < c; i++) {
res.append(str);
}
return res.toString();
},
trim: function() {
return this.replace(/(^\s+)|(\s+$)/g, '');
},
ltrim: function() {
return this.replace(/^\s+/g, '');
},
rtrim: function() {
return this.replace(/\s+$/g, '');
},
startWith: function(str, ignorCase) {
if (str.length > this.length) return false;
if (ignorCase) {
return this.toLowerCase().indexOf(str.toLowerCase()) === 0;
} else {
return this.indexOf(str) === 0;
}
},
endWith: function(str, ignorCase) {
if (str.length > this.length) return false;
if (ignorCase) {
return this.toLowerCase().lastIndexOf(str.toLowerCase()) === this.length - str.length;
} else {
return this.lastIndexOf(str) === this.length - str.length;
}
},
removeCharAt: function(index) {
if (index < 0 || index >= this.length) {
return this.valueOf();
} else if (index == 0) {
return this.substring(1, this.length);
} else if (index == this.length - 1) {
return this.substring(0, this.length - 1);
} else {
return this.substring(0, index) + this.substring(index + 1);
}
},
removeStr: function(start, end) {
if (start == end) {
return this.deleteCharAt(start);
} else {
if (start > end) {
var temp = start;
start = end;
end = temp;
}
if (start < 0) {
start = 0;
}
if (end > this.length - 1) {
end = this.length - 1;
}
return this.substring(0, start) + this.substring(end + 1, this.length);
}
},
equalIgnoreCase: function(str) {
return this.toLowerCase() === str.toLowerCase();
},
insertAfter: function(index, str) {
return this.slice(0, index + 1) + str + this.slice(index + 1);
},
insertBefore: function(index, str) {
return this.slice(0, index) + str + this.slice(index);
},
isAllNumber: function() {
for (var i = 0; i < this.length; i++) {
if (this.charAt(i) < '0' || this.charAt(i) > '9') {
return false;
}
}
return true;
},
isInt: function() {
return /^[1-9]\d$/.test(this);
},
isNullOrEmpty: function() {
if (this === null || this.trim() === "") {
return true;
}
return false;
},
isPhoneNum: function() {
var pattern = /^0{0,1}(13[0-9]|14[6|7]|15[0-3]|15[5-9]|18[0-3]|18[5-9])[0-9]{8}$/;
return pattern.test(this);
},
getCharLength: function() {
var temp = 0;
for (var i = 0; i < this.length; i++) {
if (this.charCodeAt(i) > 255) {
temp += 2;
} else {
temp += 1;
}
}
return temp;
},
getNum: function() {
return this.replace(/[^d]/g, "");
},
getEn: function() {
return this.replace(/[^A-Za-z]/g, "");
},
getCn: function() {
return this.replace(/[^u4e00-u9fa5uf900-ufa2d]/g, "");
},
left: function(n) {
return this.slice(0, n);
},
right: function(n) {
return this.slice(this.length - n);
},
encodeHTML: function() {
if (this.isNullOrEmpty()) return this;
var str = this;
str = str.replace(/&/g, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
str = str.replace(/\'/g, "'");
str = str.replace(/\"/g, """);
str = str.replace(/\t/g, " ");
str = str.replace(/\s+/g, " ");
str = str.replace(/\s/g, " ");
str = str.replace(/\n/g, "&BR");
return str;
},
decodeHTML: function() {
if (this.isNullOrEmpty()) return this;
var str = this;
str = str.replace(/&/g, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
str = str.replace(/'/g, "\'");
str = str.replace(/"/g, "\"");
str = str.replace(/ /g, "\t");
str = str.replace(/ /g, " ");
str = str.replace(/&BR/g, "\r\n");
return str;
},
truncate: function(len, str) {
if (this.length <= len) {
return this;
} else {
return this.substring(0, len) + str;
}
},
getUrlQuery: function(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = this.substr(this.indexOf("\?") + 1).match(reg);
if (r != null) return unescape(r[2]);
return null;
},
appendUrlPram: function(name, val) {
var index = this.indexOf(name + '=');
if (index > 0) {
var endPos = this.indexOf('&', index);
if (endPos > index) return this.replace('/' + this.substr(index, endPos - index) + '/', name + '=' + val);
else return this.substr(0, index) + name + '=' + val;
} else return this.indexOf('?') > 0 ? (this + '&' + name + '=' + val) : (this + '?' + name + '=' + val);
}
});
/**
* 添加StringBuilder类,提高对字符串操作的效率
*/
function StringBuilder(str) {
this._strings = new Array();
this.append(str);
}
Object.extend(StringBuilder.prototype, {
append: function(str) {
this._strings.push(a);
return this;
},
toString: function() {
var a = (arguments.length == 0) ? "" : arguments[0];
return this._strings.join(a);
}
});
/**
* 对Date的扩展方法
*/
Object.extend(Date.prototype, {
format: function(formatStr) {
var o = {
'M+': this.getMonth() + 1, //月
'd+': this.getDate(), //日
'h+': this.getHours(), //小时
'm+': this.getMinutes(), //分
's+': this.getSeconds(), //秒
'q+': Math.floor((this.getMonth() + 3) / 3), //季度
'S': this.getMilliseconds() //毫秒
}
if (/(y+)/.test(formatStr)) {
formatStr = formatStr.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fomartStr))
formatStr = formatStr.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return formatStr;
}
},
addDays: function(num) {
this.setDate(this.getDate + num);
return this;
},
addWeeks: function(num) {
return this.addDays(num * 7);
},
addMonths: function(num) {
var d = this.getDate();
this.setMonth(this.getMonth() + num);
if (this.getDate < d) {
this.setDate(0);
}
return this;
},
addYears: function(num) {
var m = this.getMonth();
this.setFullYear(this.getFullYear() + num);
if (m < this.getMonth()) {
this.setDate(0);
}
return this;
},
isValiDate: function(dateStr, formatStr) {
if (!dateStr) {
return false;
}
if (!formatStr) {
formatStr = "yyyy-MM-dd"; //默认格式:yyyy-MM-dd
}
if (dateStr.length != formatStr.length) {
return false;
} else {
if (formatStr == "yyyy-MM-dd" || formatStr == "YYYY-MM-DD") {
var r1 = /^(((((([02468][048])|([13579][26]))(00))|(d{2}(([02468][48])|([13579][26]))))-((((0[13578])|(1[02]))-(([0-2][0-9])|(3[01])))|(((0[469])|(11))-(([0-2][0-9])|(30)))|(02-([0-2][0-9]))))|(d{2}(([02468][1235679])|([13579][01345789]))-((((0[13578])|(1[02]))-(([0-2][0-9])|(3[01])))|(((0[469])|(11))-(([0-2][0-9])|(30)))|(02-(([0-1][0-9])|(2[0-8]))))))$/;
return r1.test(dateStr);
} else if (formatStr == "yyyy/MM/dd" || formatStr == "YYYY/MM/DD") {
var r2 = /^(((((([02468][048])|([13579][26]))(00))|(d{2}(([02468][48])|([13579][26]))))\/((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/([0-2][0-9]))))|(d{2}(([02468][1235679])|([13579][01345789]))\/((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/(([0-1][0-9])|(2[0-8]))))))$/;
return r2.test(dateStr);
} else if (formatStr == "MM-dd-yyyy" || formatStr == "MM-DD-YYYY") {
var r3 = /^((((((0[13578])|(1[02]))-(([0-2][0-9])|(3[01])))|(((0[469])|(11))-(([0-2][0-9])|(30)))|(02-([0-2][0-9])))-(((([02468][048])|([13579][26]))(00))|(d{2}(([02468][48])|([13579][26])))))|(((((0[13578])|(1[02]))-(([0-2][0-9])|(3[01])))|(((0[469])|(11))-(([0-2][0-9])|(30)))|(02-(([0-1][0-9])|(2[0-8])))))-d{2}(([02468][1235679])|([13579][01345789])))$/;
return r3.test(dateStr);
} else if (formatStr == "MM/dd/yyyy" || formatStr == "MM/DD/YYYY") {
var r4 = /^((((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/([0-2][0-9])))\/(((([02468][048])|([13579][26]))(00))|(d{2}(([02468][48])|([13579][26])))))|(((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/(([0-1][0-9])|(2[0-8])))))\/d{2}(([02468][1235679])|([13579][01345789])))$/;
return r4.test(dateStr);
} else {
// throw new Error('日期格式不正确');
return false;
}
}
return false;
},
isValiTime: function(timeStr, formatStr) {
if (!timeStr) {
return false;
}
if (!formatStr) {
formatStr = "hh:mm:ss"; //默认格式:hh:mm:ss
}
if (timeStr.length != formatStr.length) {
return false;
} else {
if (formatStr == "hh:mm:ss") {
var r1 = /^(([0-1][0-9])|(2[0-3])):([0-5][0-9]):([0-5][0-9])$/;
return r1.test(timeStr);
} else if (formatStr == "hh-mm-ss") {
var r2 = /^(([0-1][0-9])|(2[0-3]))-([0-5][0-9])-([0-5][0-9])$/;
return r2.test(timeStr);
} else if (formatStr == "hh/mm/ss") {
var r3 = /^(([0-1][0-9])|(2[0-3]))\/([0-5][0-9])\/([0-5][0-9])$/;
return r3.test(timeStr);
} else {
// throw new Error("时间格式不正确!");
return false;
}
}
return false;
},
isValiDateTime: function(dateTimeStr) {
var dateTimeReg = /^(((((([02468][048])|([13579][26]))(00))|(d{2}(([02468][48])|([13579][26]))))-((((0[13578])|(1[02]))-(([0-2][0-9])|(3[01])))|(((0[469])|(11))-(([0-2][0-9])|(30)))|(02-([0-2][0-9]))))|(d{2}(([02468][1235679])|([13579][01345789]))-((((0[13578])|(1[02]))-(([0-2][0-9])|(3[01])))|(((0[469])|(11))-(([0-2][0-9])|(30)))|(02-(([0-1][0-9])|(2[0-8]))))))(s{1}(([0-1][0-9])|(2[0-3])):([0-5][0-9]):([0-5][0-9]))?$/
return dateTimeReg.test(dateTimeStr);
},
isLeapYear: function() {
return (this.getYear() % 4 == 0 && ((this.getYear() != 0) || (this.getYear() % 400 == 0)));
},
daysBetween: function(dateOne, dateTwo) {
if ((dateOne instanceof Date) == false || (dateTwo instanceof Date) == false) {
return 0;
} else {
return Math.abs(Math.floor((dateOne.getTime() - dateTwo.getTime()) / 1000 / 60 / 60 / 24));
}
},
dateDiff: function(dtEnd, field) {
var dtStart = this;
if ((dtEnd instanceof Date) == false) {
return 0;
} else {
if (!field) {
field = "d";
}
switch (field) {
case 'Y':
case 'y':
return dtEnd.getFullYear() - dtStart.getFullYear();
break;
case 'M':
return (dtEnd.getMonth() + 1) + ((dtEnd.getFullYear() - dtStart.getFullYear()) * 12) - (dtStart.getMonth() + 1);
break;
case 'W':
case 'w':
return parseInt((dtEnd - dtStart) / (86400000 * 7));
break;
case 'D':
case 'd':
return parseInt((dtEnd - dtStart) / 86400000);
break;
case 'H':
case 'h':
return parseInt((dtEnd - dtStart) / 3600000);
break;
case 'm':
return parseInt((dtEnd - dtStart) / 60000);
break;
case 'S':
case 's':
return parseInt((dtEnd - dtStart) / 1000);
break;
default:
return 0;
}
return 0;
}
},
toArray: function() {
var myArray = new Array();
myArray[0] = this.getFullYear();
myArray[1] = this.getMonth();
myArray[2] = this.getDate();
myArray[3] = this.getHours();
myArray[4] = this.getMinutes();
myArray[5] = this.getSeconds();
return myArray;
},
datePart: function(field) {
if (!field) {
field = "d";
}
var Week = ['日', '一', '二', '三', '四', '五', '六'];
switch (field) {
case 'Y':
case 'y':
return this.getFullYear();
break;
case 'M':
return (this.getMonth() + 1);
break;
case 'W':
case 'w':
return Week[this.getDay()];
break;
case 'D':
case 'd':
return this.getDate();
break;
case 'H':
case 'h':
return this.getHours();
break;
case 'm':
return this.getMinutes();
break;
case 's':
return this.getSeconds();
break;
default:
return this.getDate();
}
return this.getDate();
}
});
/**
* 对ajax的扩展
* 调用示例:
* new HttpAjax({
type:"get",
url:"testAjax.php",
data:{"name":'Jack'},
success:function(data){
console.log(data);
},
failure:function(data){
console.log(data);
},
isAsyn:false
});
*/
HttpAjax = (function() {
function HttpAjax(options) {
var settings = {
type: 'post', //请求类型
url: '', //请求地址
data: { "id": -1 }, //json格式的参数
success: function() {}, //成功的回调函数
failure: function() {}, //失败的回调函数
isAsyn: true //是否为异步
};
this.options = Object.extend(settings, options);
Object.extend(HttpAjax.prototype, {
_createXhr: function() {
if (typeof XMLHttpRequest !== 'undefined') {
return new XMLHttpRequest();
} else if (typeof ActiveXObject !== 'undefined') {
var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'];
for (var i = 0, len = versions.length; i < len; i++) {
try {
var xhr = new ActiveXObject(versions[i]);
this.IsCreateOk = versions[i];
return xhr;
} catch (e) {}
}
if (typeof this.IsCreateOk === 'undefined') {
throw new Error("您的浏览器版本过低,无法创建异步对象,请升级您的浏览器!");
}
}
},
_encodeData: function(paramters) {
var data = [];
for (var name in paramters) {
//将数组中的数据以=拼接后再添加到data数组中 [name=aa,age=11]
var _regesp = /%20/g; //空格的正则表达式
var _value = paramters[name].toString(); //获取值
data.push(encodeURIComponent(name).replace(_regesp, '+') + "=" + encodeURIComponent(_value).replace(_regesp, '+'));
}
//以&将数组元素拼接后返回 如:name=aa&age=11
return data.join("&");
},
_regCallback: function(xhr) {
var _this = this;
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 300) {
_this.options.success(_this._getResponseData(xhr), xhr.statusText);
} else {
_this.options.failure(xhr.status, xhr.statusText);
}
}
}
},
_getResponseData: function(xhr) {
var responseType = xhr.getResponseHeader("Content-Type");
switch (responseType) {
case 'text/xml':
return xhr.responseXML;
case 'text/json':
case 'text/javascript':
case 'application/javascript':
case 'application/x-javascript':
return eval('(' + xhr.responseText + ')');
default:
return xhr.responseText;
};
},
_init: function(options) {
this.options = options;
if (this.options.url == "") return;
this.xhr = this._createXhr(); //创建异步对象
this._regCallback(this.xhr); //注册回调事件
//根据请求类型,发送异步请求
if (this.options.type.toLowerCase() == "post") {
this._post(this.xhr);
} else {
this._get(this.xhr);
}
},
_post: function(xhr) {
this.xhr = xhr;
this.data = this._encodeData(this.options.data);
this.url = this.options.url + "?d=" + parseInt(Math.random() * 100 + 1, 10);
this.asyn = !!this.options.isAsyn;
xhr.open("POST", this.url, this.asyn);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(this.data);
},
_get: function(xhr) {
this.xhr = xhr;
this.data = this._encodeData(this.options.data);
this.url = this.options.url + '?' + this.data + '&d=' + parseInt(Math.random() * 100 + 1, 10);
this.asyn = !!this.options.isAsyn;
xhr.open('GET', this.url, this.asyn);
xhr.send(null);
}
});
this._init(this.options);
};
return HttpAjax;
})(window);
/**
* 对cookie的扩展
*/
Object.extend(Document.cookie.prototype, {
setCookie: function(name, value, days) {
var d = new Date();
d.setDate(d.getDate() + days);
document.cookie = name + '=' + value + ';expires' + d;
},
getCookie: function(name) {
var arr = document.cookie.split(',');
for (var i = 0, len = arr.length; i < len; i++) {
var keyV = arr[i].split('=');
if (keyV[0] == name) {
return keyV[1];
}
}
return '';
},
removeCookie: function(name) {
setCookie(name, '', -1);
}
});
})(window)