0%

Javascript常用方法

防抖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function debounce(fn, delay) {
var delay1 = delay || 1000
var timer
return function () {
var th = this
var args = arguments
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(function () {
timer = null
fn.apply(th, args)
}, delay1)
}
}
节流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function throttle(fn, interval) {
var last
var timer
var interval1 = interval || 2000
return function () {
var th = this
var args = arguments
var now = +new Date()
if (last && now - last < interval) {
clearTimeout(timer)
timer = setTimeout(function () {
last = now
fn.apply(th, args)
}, interval1)
} else {
last = now
fn.apply(th, args)
}
}
}
校验车牌
1
2
3
4
5
6
7
8
9
function isCarNum(val) {
var patrn = /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1})$/
var patrn2 = /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))$/
if (!patrn.test(val) && !patrn2.test(val)) {
return false
} else {
return true
}
}
校验车架号
1
2
3
4
5
6
7
8
function isVehicle(val) {
var patrn = /^[A-HJ-NP-Za-hj-np-z0-9]+$/
if (!patrn.test(val) || val === '') {
return false
} else {
return true
}
}
检验身份证号码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
funtion isSfz(idcard) {
var Errors = [1, '身份证号码位数不对', '出生日期错误', '身份证号码错误', '身份证地区非法']
var area = {
11: '北京',
12: '天津',
13: '河北',
14: '山西',
15: '内蒙古',
21: '辽宁',
22: '吉林',
23: '黑龙江',
31: '上海',
32: '江苏',
33: '浙江',
34: '安徽',
35: '福建',
36: '江西',
37: '山东',
41: '河南',
42: '湖北',
43: '湖南',
44: '广东',
45: '广西',
46: '海南',
50: '重庆',
51: '四川',
52: '贵州',
53: '云南',
54: '西藏',
61: '陕西',
62: '甘肃',
63: '青海',
64: '宁夏',
65: 'xinjiang',
71: '台湾',
81: '香港',
82: '澳门',
91: '国外'
}
var Y, JYM
var S, M, ereg, Err
var arr = []
arr = idcard.split('')
if (area[parseInt(idcard.substr(0, 2))] == null) {
Err = Errors[4]
return Err
}
switch (idcard.length) {
case 15:
if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 === 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 === 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 === 0)) {
ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/ // 测试出生日期的合法性
} else {
ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/ // 测试出生日期的合法性
}
if (ereg.test(idcard)) {
Err = Errors[0]
} else {
Err = Errors[2]
}
return Err
case 18:
if (parseInt(idcard.substr(6, 4)) % 4 === 0 || (parseInt(idcard.substr(6, 4)) % 100 === 0 && parseInt(idcard.substr(6, 4)) % 4 === 0)) {
ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/ // 闰年出生日期的合法性正则表达式
} else {
ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/ // 平年出生日期的合法性正则表达式
}
if (ereg.test(idcard)) {
S = (parseInt(arr[0]) + parseInt(arr[10])) * 7 + (parseInt(arr[1]) + parseInt(arr[11])) * 9 + (parseInt(arr[2]) + parseInt(arr[12])) * 10 + (parseInt(arr[3]) + parseInt(arr[13])) * 5 + (parseInt(arr[4]) + parseInt(arr[14])) * 8 + (parseInt(arr[5]) + parseInt(arr[15])) * 4 + (parseInt(arr[6]) + parseInt(arr[16])) * 2 + parseInt(arr[7]) * 1 + parseInt(arr[8]) * 6 + parseInt(arr[9]) * 3
Y = S % 11
M = 'F'
JYM = '10X98765432'
M = JYM.substr(Y, 1)
if (M === arr[17]) {
Err = Errors[0]
} else {
Err = Errors[3]
}
} else {
Err = Errors[2]
}
return Err
default:
Err = Errors[1]
return Err
}
}
格式化字符串(去掉空格、回车符)
1
2
3
4
5
6
function iGetInnerText(testStr) {
var resultStr = testStr.replace(/\ +/g, "");
resultStr = testStr.replace(/[ ]/g, "");
resultStr = testStr.replace(/[\r\n]/g, "");
return resultStr;
}
正则表达式获取地址栏参数
1
2
3
function getURLParameter(t){
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
}
屏蔽网页在PC端访问

在head添加代码:

1
2
3
4
5
6
7
8
9
10
<script>
var system = {};
var p = navigator.platform;
var u = navigator.userAgent;

system.win = p.indexOf("Win") == 0;
system.mac = p.indexOf("Mac") == 0;
system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);
(system.win || system.mac || system.xll) && (window.location.href = 'https://www.baidu.com/');
</script>
获取IP地址
1
2
3
4
5
6
$.ajax({
url: 'https://icanhazip.com/',
success:function(res){
that.internalip=iGetInnerText(res) //格式化返回的结果
}
})
json转成参数字符串
1
2
3
4
5
6
var json = {
sh: '上海'
}
var params = Object.keys(json).map(function (key) {
return encodeURIComponent(key) + "=" + encodeURIComponent(json[key]);
}).join("&");
生成uuid的四种方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function uuid() {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = "-";

var uuid = s.join("");
return uuid;
}

function guid2() {
function S4() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}

function guid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}

//指定长度和基数
function uuid2(len, radix) {
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
var uuid = [],
i;
radix = radix || chars.length;

if (len) {
// Compact form
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
// rfc4122, version 4 form
var r;

// rfc4122 requires these characters
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';

// Fill in random data. At i==19 set the high bits of clock sequence as
// per rfc4122, sec. 4.1.5
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
PC模拟器模拟微信环境

安卓微信UA:
mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, like gecko) version/4.0 mobile safari/534.30 micromessenger/5.0.1.352

Ios微信UA:
mozilla/5.0 (iphone; cpu iphone os 5_1_1 like mac os x) applewebkit/534.46 (khtml, like gecko) mobile/9b206 micromessenger/5.0

获取指定数量随机数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//max数组返回[0-max]
function randomNum(max){
var randoms=[];
while (true)
{
var isExists = false;
var random = parseInt(0 + max * (Math.random()))
for (var i = 0; i < randoms.length; i++) {
if (random === randoms[i]) {
isExists = true;
break;
}
}
if (!isExists) randoms.push(random);
//设置返回数组长度(此处默认为6位)
if (randoms.length === 6)break;
}
return randoms;
}
向页面注入js代码
1
2
3
4
5
6
7
8
9
10
//参数说明:
// t:js内容(字符串)
// n: 回调函数
// e: 注入js的位置,eg:document.getElementById('indexHeader')
function createScript(t, n, e) {
if (t) {
var r = document.getElementsByTagName("head")[0], i = document.createElement("script");
i.setAttribute("type", "text/javascript"), i.innerHTML = t, e ? e.appendChild(i) : r.appendChild(i), n()
}
}
向页面注入css代码
1
2
3
4
5
6
7
8
9
10
//参数说明:
// t:css内容(字符串)
// n: 回调函数
// e: 注入css的位置,eg:document.getElementById('indexHeader')
function createStyle(t, n, e) {
if (t) {
var r = document.getElementsByTagName("head")[0], i = document.createElement("style");
i.innerHTML = t, e ? e.appendChild(i) : r.appendChild(i), n && n()
}
}
时间格式化
1
2
3
4
5
6
7
8
9
10
11
//调用方法:getSpecialTimeStr('2017-04-14 15:50:00')
function getSpecialTimeStr(t) {
var n = this.strToTime(t);
if (!n)return !1;
var e = (new Date).getTime(), r = Number(e - n), i = 864e5, o = 36e5, u = 6e4;
if (r >= i) {
var a = r / i;
return a > 2 ? this.timeToString(n) : a > 1 ? "前天" : "昨天"
}
return r >= o ? Math.floor(r / o) + "小时前" : r >= u ? Math.floor(r / u) + "分钟前" : "最新"
}
数组扩展方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//删除指定元素
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
//集合取交集
Array.intersect = function () {
var result = new Array();
var obj = {};
for (var i = 0; i < arguments.length; i++) {
for (var j = 0; j < arguments[i].length; j++) {
var str = arguments[i][j];
if (!obj[str]) {
obj[str] = 1;
}
else {
obj[str]++;
if (obj[str] == arguments.length)
{
result.push(str);
}
}//end else
}//end for j
}//end for i
return result;
}
//集合去掉重复
Array.prototype.uniquelize = function () {
var tmp = {},
ret = [];
for (var i = 0, j = this.length; i < j; i++) {
if (!tmp[this[i]]) {
tmp[this[i]] = 1;
ret.push(this[i]);
}
}
return ret;
}
//并集
Array.union = function () {
var arr = new Array();
var obj = {};
for (var i = 0; i < arguments.length; i++) {
for (var j = 0; j < arguments[i].length; j++)
{
var str=arguments[i][j];
if (!obj[str])
{
obj[str] = 1;
arr.push(str);
}
}//end for j
}//end for i
return arr;
}

//2个集合的差集 在arr不存在
Array.prototype.minus = function (arr) {
var result = new Array();
var obj = {};
for (var i = 0; i < arr.length; i++) {
obj[arr[i]] = 1;
}
for (var j = 0; j < this.length; j++) {
if (!obj[this[j]])
{
obj[this[j]] = 1;
result.push(this[j]);
}
}
return result;
}
//数组随机显示
Array.prototype.shuffle = function() {
var input = this;
for (var i = input.length-1; i >=0; i--) {
var randomIndex = Math.floor(Math.random()*(i+1));
var itemAtIndex = input[randomIndex];
input[randomIndex] = input[i];
input[i] = itemAtIndex;
}
return input;
}
公用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
var GLOBAL = {},
GLOBAL.Js = {
trim: function (t) {
return t.replace(/^\s+|\s+$/g, "")
}, isNumber: function (t) {
return !isNaN(t)
}, isString: function (t) {
return "string" == typeof t
}, isBoolean: function (t) {
return "boolean" == typeof t
}, isFunction: function (t) {
return "function" == typeof t
}, isNull: function (t) {
return null === t
}, isUndefined: function (t) {
return "undefined" == typeof t
}, isEmpty: function (t) {
return /^\s*$/.test(t)
}, isArray: function (t) {
return t instanceof Array
}
},
//cookie操作
GLOBAL.Cookie = {
set: function (t, n, e) {
var r = e ? 60 * Number(e) * 60 * 1e3 : 864e5, i = new Date;
i.setTime(i.getTime() + r);
var o = e ? "; expires=" + i.toUTCString() : "";
document.cookie = t + "=" + encodeURI(n) + o;
}, get: function (t) {
var arr,reg=new RegExp("(^| )"+t+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)){ return unescape(arr[2]);}else{return null;}
}, del: function (t) {
var cval=this.get(t);
if(cval!=null){
document.cookie= t + "="+cval+";expires="+(new Date(0)).toGMTString();
}
}
},
//数组比较返回差异的地方
GLOBAL.Array = {
difference: function (t, n) {
try {
var e = [], r = 0, i = t.length;
for (r = 0; r < i; r++)n.contains(t[r]) || e.push(t[r]);
return e
} catch (o) {
return console.error(o), t
}
}
},
//终端判断
GLOBAL.Os = function () {
for (var t = navigator.userAgent, n = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"), e = !1, r = 0; r < n.length; r++)if (t.indexOf(n[r]) > -1) {
e = !0;
break
}
return {
mobile: e,
ios: !!t.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
android: t.indexOf("Android") > -1 || t.indexOf("Linux") > -1,
iphone: t.indexOf("iPhone") > -1,
ipad: t.indexOf("iPad") > -1,
webapp: t.indexOf("Safari") === -1
}
}(),
//浏览器类型判断
GLOBAL.Browser = function () {
var t = navigator.userAgent, n = GLOBAL.Os.mobile;
return n ? {
wechat: t.indexOf("MicroMessenger") > -1,
weibo: t.toLowerCase().indexOf("weibo") > -1,
qq: t.indexOf("QQ/") > -1,
qqbrowser: t.indexOf("MQQBrowser") > -1
} : {}
}();