-
Notifications
You must be signed in to change notification settings - Fork 0
/
common.js
executable file
·357 lines (357 loc) · 13.3 KB
/
common.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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
/**
* ********************************************
* Description : 基本JS类库
* Filename : common.js
* Create time : 2012-02-17 17:25:16
* Last modified : 2012-02-17 17:25:16
* License : MIT, GPL
* ********************************************
*/
(function(){
var document = window.document,
navigator = window.navigator,
location = window.location;
if (typeof(gScript) == 'undefined') {
var gScript = {
/**
* 根据ID获得对象
*
* @param string _id 对象的ID
* @return object 对应ID的对象
*/
G: function(_id) {
return document.getElementById(_id);
},
/**
* 绑定事件
*
* @param object dom 要绑定事件的对象
* @param string type 要绑定事件的类型
* @param function fun 要绑定事件的方法
*/
addEvent: function(dom, type, fun) {
if (dom.addEventListener) {
dom.addEventListener(type, fun, false);
} else {
dom.attachEvent('on' + type, fun);
}
},
/**
* 根据名称获得对象
*
* @param string val 对象的名称
* @return array 对应名称的对象集合
*/
GN : function(val) {
return document.getElementsByName(val);
},
/**
* 根据标签名称获得对象
*
* @param string val 标签的名称
* @param object dom 限定的对象
* @return array 返回对应标签对象的数组
*/
GTN : function(val, dom) {
var dom = dom || window.document;
return dom.getElementsByTagName(val);
},
/**
* 根据样式名称获得对象
*
* @param string val 样式名称
* @param object dom 限定的对象
* @param string tag 限定的标签名称
* @param array 返回对应样式名称对象的数组
*/
GCN : function (val, dom, tag) {
var dom = dom || window.document.body;
var _t = tag || '*';
var ret = new Array();
if (document.getElementsByClassName) {
var nodes = dom.getElementsByClassName(val);
if (_t != '*') {
for (var i in nodes) {
if ( node.tagName == _t.toUpperCase() ) {
ret.push(nodes[i]);
}
}
} else {
ret = nodes;
}
} else {
var classes = val.split(' ');
var _dom = _t == '*' ? this.getChildNodes(dom) : GTN(tag, dom);
var patterns = [];
for (var i in classes) {
patterns.push(eval('/(?:(^|\\s)' + classes[i] + '(\\s|$))/'));
}
for (var i = 0, _len = _dom.length; i < _len; i++) {
var match = false;
for (var a in patterns) {
match = patterns[a].test(_dom[i].className);
if (!match) break;
}
if (match) ret.push(_dom[i]);
}
}
return ret;
},
/**
* 获得一个节点下所有节点
*
* @param object _dom 源节点
* @return array 所有子节点
*/
getChildNodes : function(_dom) {
var _ele = new Array(), _dom = _dom || window.document.body;
/**
* 获得子节点
*
* @param object _dom 源
*/
function getNodesItem(_dom) {
_ele.push(_dom);
var _child = _dom.childNodes;
for (var i = 0, _max = _child.length; i < _max; i++) {
if (_child[i].nodeType == 1) {
getNodesItem(_child[i]);
}
}
}
getNodesItem(_dom);
_ele.shift();
return _ele;
},
/**
* 在一个元素后面插入一个元素
*
* @param object new_dom 新添加的元素对象
* @param object src_dom 源元素对象
*/
insertAfter : function(new_dom, src_dom) {
var p_dom = src_dom.parentNode;
if (p_dom.lastChild == src_dom) {
p_dom.appendChild(new_dom);
} else {
p_dom.insertBefore(new_dom, src_dom.nextSibling);
}
},
/**
* 创建元素
*
* @param string tag 标签的名称
* @return object 标签对应的对象
*/
CE : function(tag) {
return document.createElement(tag);
},
/**
* 获得或设置 元素的属性
*
* @param object object 对象
* @param string type 元素的属性
* @param string val 值(可选,若有则是设置,若无则是获得)
* @return mix 执行后返回值或者当前对象
*/
attr : function(dom, type, val) {
if (val) {
dom.setAttribute(type, val);
return dom;
} else {
return dom.getAttribute(type);
}
},
/**
* 字符串长度(汉字2,英文1)
*
* @param string str 源字符
* @return int 字符串的长度
*/
getTrueLength : function(str) {
var len = 0;
for (var i = 0, max = str.length; i < max; i++) {
var char_code = str.charCodeAt(i);
if (char_code >= 0 && char_code <= 254) {
len += 1;
} else {
len += 2;
}
}
return len;
},
/**
* 获得数组中最大的数字
*
* @param array arr 源数组
* @return int 数组中最大的数字
*/
getArrayMax : function(arr) {
return Math.max.apply({}, arr);
},
/**
* 获得数组中最小的数字
*
* @param array arr 源数组
* @return int 数组中最小的数字
*/
getArrayMin : function(arr) {
return Math.min.apply({}, arr);
},
/**
* 获得缩放后的尺寸
*
* @param object _src 源尺寸: _src.w = > 宽, _src.h => 高
* @param object _to 缩放尺寸: _to.w => 宽, _to.h => 高
* @reutrn array 缩放后的尺寸
*/
getZoomSize : function(_src, _to) {
var to_w = _to.w || 0, to_h = _to.h || 0, _w, _h;
if (to_w == 0 && to_h == 0) {
_w = _src.w;
_h = _src.h;
} else if ( to_w == 0 ) {
_w = _src.w * to_h / _src.h;
_h = to_h;
} else if ( to_h == 0 ) {
_w = to_w;
_h = _src.h * to_w / _src.w;
} else {
var _src_p = _src.w / _src.h;
var _to_p = to_w / to_h;
if (_src_p > _to_p) {
_w = to_w;
_h = _src.h * to_w / _src.w;
} else if (_src_p < _to_p) {
_w = _src.w * to_h / _src.h;
_h = to_h;
} else {
_w = to_w;
_h = to_h;
}
}
return [_w, _h];
},
/**
* 获得页面可见区域的高宽
*
* @return array size[0] => 宽度, size[1] => 高度
*/
getBodySize : function() {
var size = new Array();
if (document.documentElement) {
size[0] = document.documentElement.clientWidth;
size[1] = document.documentElement.clientHeight;
} else {
size[0] = document.body.clientWidth;
size[1] = document.body.clientHeight;
}
return size;
},
/**
* 获得元素位置
*
* @param object dom 要获得位置元素的对象
*/
getPos : function(dom) {
if ( arguments.length != 1 || dom == null ) {
return null;
}
var offsetTop = dom.offsetTop;
var offsetLeft = dom.offsetLeft;
while( dom = dom.offsetParent ) {
if ( dom.style.position == 'absolute' || ( dom.style.overflow != 'visible' && dom.style.overflow != '' ) ) {
break;
}
offsetTop += dom.offsetTop;
offsetLeft += dom.offsetLeft;
}
return {top : offsetTop, left : offsetLeft};
},
/**
* 获得页面滚动的高度
*/
getScrollTop : function() {
return document.documentElement.scrollTop || window.pageYoffset || document.body.scrollTop;
},
/**
* 设置cookie
*
* @param string name cookie名称
* @param string val cookie值
* @param int t cookie有效时间
* @param string domain cookie有效域
*/
setCookie: function(name, val, t, domain){
var exp = new Date();
exp.setTime(exp.getTime() + (t * 1000));
var _d = '';
if (domain) {
_d = ';domain=' + domain;
}
document.cookie = name + "=" + escape(val) + ";expires="+ exp.toGMTString() + ";path=/" + _d;
},
/**
* 获得cookie
*
* @param string name 要获得cookie的名称
*/
getCookie: function(name) {
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if ( arr != null) {
return unescape(arr[2]);
} else {
return "";
}
},
/**
* 删除cookie
*
* @param string name 要删除的cookie名称
*/
delCookie: function(name) {
var cval = this.getCookie(name);
if ( cval != null ) {
cval = '';
document.cookie = name + "=" + cval + ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
},
/**
* 获得数组中最小的值的位置
*
* @param array arr 源数组
* @return int 数组的下标
*/
getArrayMinIndex : function(arr) {
var _a = this.getArrayMin(arr);
for (var i in arr) {
if (arr[i] == _a) {
return i;
}
}
},
/**
* 克隆对象
*
* @param object obj 要克隆的对象
* @return object 克隆后的对象
*/
clone : function(obj) {
var objClone = obj.constructor == Object ? new obj.constructor() : new obj.constructor(obj.valueOf());
for (var key in obj) {
if (objClone[key] != obj[key]) {
if (typeof(obj[key]) == 'object') {
objClone[key] = this.clone(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
objClone.toString = obj.toString;
objClone.valueOf = obj.valueOf;
return objClone;
}
}
window.gScript = gScript;
}
})();