/
util.js
165 lines (152 loc) · 3.42 KB
/
util.js
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/**
* Module : Sparrow util tools
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-07-27 21:46:50
*/
/**
* 创建一个带壳的对象,防止外部修改
* @param {Object} proto
*/
var createShellObject = function(proto) {
var exf = function() {}
exf.prototype = proto;
return new exf();
};
var execIgnoreError = function(a, b, c) {
try {
a.call(b, c);
} catch(e) {}
};
var getFunction = function(target, val) {
if(!val || typeof val == 'function') return val
if(typeof target[val] == 'function')
return target[val]
else if(typeof window[val] == 'function')
return window[val]
else if(val.indexOf('.') != -1) {
var func = getJSObject(target, val)
if(typeof func == 'function') return func
func = getJSObject(window, val)
if(typeof func == 'function') return func
}
return val
};
var getJSObject = function(target, names) {
if(!names) {
return;
}
if(typeof names == 'object')
return names
var nameArr = names.split('.')
var obj = target
for(var i = 0; i < nameArr.length; i++) {
obj = obj[nameArr[i]]
if(!obj) return null
}
return obj
};
var isDate = function(input) {
return Object.prototype.toString.call(input) === '[object Date]' ||
input instanceof Date;
};
var isNumber = function(obj) {
//return obj === +obj
//加了个typeof 判断,因为'431027199110.078573'会解析成number
return (typeof obj ==='number') && (obj - parseFloat(obj) + 1 >= 0);
};
var isArray = Array.isArray || function(val) {
return Object.prototype.toString.call(val) === '[object Array]';
};
var isEmptyObject = function(obj) {
var name;
for(name in obj) {
return false;
}
return true;
};
var inArray = function(node, arr) {
if(!arr instanceof Array) {
throw "arguments is not Array";
}
for(var i = 0, k = arr.length; i < k; i++) {
if(node == arr[i]) {
return true;
}
}
return false;
};
var isDomElement = function(obj) {
if(window['HTMLElement']) {
return obj instanceof HTMLElement;
} else {
return obj && obj.tagName && obj.nodeType === 1;
}
};
var each = function(obj, callback) {
if(obj.forEach) {
obj.forEach(function(v, k) {
callback(k, v);
});
} else if(obj instanceof Object) {
for(var k in obj) {
callback(k, obj[k]);
}
} else {
return;
}
};
try{
NodeList.prototype.forEach = Array.prototype.forEach;
}catch(e){
}
/**
* 获得字符串的字节长度
*/
String.prototype.lengthb = function() {
// var str = this.replace(/[^\x800-\x10000]/g, "***");
var str = this.replace(/[^\x00-\xff]/g, "**");
return str.length;
};
/**
* 将AFindText全部替换为ARepText
*/
String.prototype.replaceAll = function(AFindText, ARepText) {
//自定义String对象的方法
var raRegExp = new RegExp(AFindText, "g");
return this.replace(raRegExp, ARepText);
};
var dateFormat = function ( str ) {
//如果不是string类型 原型返回
if ( typeof ( str ) !== 'string')
{
return str;
}
//判断 str 格式如果是 yy-mm-dd
if (str && str.indexOf ('-') > -1){
//获取当前是否是 ios版本,>8是因为ios不识别new Date(“2016/11”)格式
var ua = navigator.userAgent.toLowerCase();
if (/iphone|ipad|ipod/.test(ua)) {
//转换成 yy/mm/dd
str = str.replace(/-/g,"/");
str = str.replace(/(^\s+)|(\s+$)/g,"");
if(str.length <= 8){
str = str += "/01";
}
}
}
return str;
}
export {
createShellObject,
execIgnoreError,
getFunction,
getJSObject,
isDate,
isNumber,
isArray,
isEmptyObject,
inArray,
isDomElement,
each,
dateFormat
};