json

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

/**
* ajax获取json数据 支持回调
* @param url(string) 接口地址 同时也支持对象传递{url:",data:{}}
*/
loadJson: function(url, callback) {
var _data = {},
_type = "post";

if (typeof url == 'object' && url.url) {
_data = url.data;
if (url.type)
_type = url.type;
url = url.url;
}
$.ajax({
url: url,
type: _type, // 默认post
dataType: "json",
data: _data,
success: function(json) {
if (typeof callback == "function") {
callback(json);
}
},
error: function(jqXHR, textStatus, errorThrown) {
if (typeof callback == "function") {
callback({ reload: true }); //reload:为true表示重新执行数据请求 多见适用于用户是否登录认证
}
}
});
},
/**
* 同步获取数据
*/
loadJsonNoAsync: function(url, callback) {
var _data = {},
_type = "post";

if (typeof url == 'object' && url.url) {
_data = url.data;
if (url.type)
_type = url.type;
url = url.url;
}
$.ajax({
url: url,
type: _type, // 默认post
dataType: "json",
async: false, //同步机制开启
data: _data,
success: function(json) {
if (typeof callback == "function") {
callback(json);
}
},
error: function(jqXHR, textStatus, errorThrown) {
//alert(textStatus);
}
});
}
/**
* 普通ajax表单提交
* @param {Object} form
* @param {Object} callback
* @param {String} confirmMsg 提示确认信息
*/
validateCallback: function(form, callback) {
var $form = $(form);
var sdata = $form.serializeArray();
for (var i in sdata) {
if (sdata[i].name != undefined && sdata[i].name == 'pwd')
sdata[i].value = this.encryptPass(sdata[i].value);
}

var _submitFn = function() {
$.ajax({
type: form.method ? form.method : "get",
url: $form.attr("action"),
data: sdata,
dataType: "json",
cache: false,
success: callback,
error: callback
});
}
_submitFn();

return false;
}
/**
* 获取url参数
*/
getParam: function(b) {
var c = document.location.search;
if (!b) { return c }
var d = new RegExp("[?&]" + b + "=([^&]+)", "g");
var g = d.exec(c);
var a = null;
if (null != g) {
try {
a = decodeURIComponent(decodeURIComponent(g[1]))
} catch (f) {
try {
a = decodeURIComponent(g[1])
} catch (f) {
a = g[1]
}
}
}
return a;
}

模版操作(template.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
/**
* 将json数据对象根据模板进行数据显示解析
* @param json:obejct 数据对象
* @param templateId:string 数据模板ID 兼容已逗号间隔的ID串形如:template1,template2
* @param showId:string html显示容器ID 兼容已逗号间隔的ID串形如:show1,show2
* @param callback:function 回调函数(模板解析完毕后的回调函数 需要对生成的html元素进行后续操作)
* @param isAppend:bool 是否为数据附加模式(常见于列表分页加载的需求)
*/
converTemplateToHtml: function(json, templateId, showId, callback, isAppend) {
if (json && templateId && showId) {
var templateArr = templateId.split(','),
showArr = showId.split(',');
if (templateArr.length != showArr.length) {
console.error("模板个数与容器个数不对等,请检查!");
return;
}
for (var i = 0; i < templateArr.length; i++) {
if ($("#" + templateArr[i]).length == 0) {
console.error(templateArr[i] + " 的模板不存在");
return;
}
if ($("#" + showArr[i]).length == 0) {
console.error(showArr[i] + " 的容器不存在");
return;
}
var rst = TrimPath.processDOMTemplate(templateArr[i], json); // 解析制定的 _tid 中的模版代码
//是否附加模式
if (isAppend)
$("#" + showArr[i]).append(rst.toString());
else
$("#" + showArr[i]).html(rst.toString());
}
if (typeof callback == "function")
callback();
}
}

动态渲染

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
/**
* 根据dom对象 数据源和 属性进行内容渲染
*/
SetItemDom: function(_dom, json, k) {
//front:前缀 back :后缀 format:是否格式化为千分位 len :显示长度 showstart 是截取字符串开始位置 default:默认填充文字 当数据对象为空时
var _front = '',
_back = '',
_format = "0",
_len = 0,
_default = "";

if (_dom.tagName == 'A') {
var _href = decodeURI(_dom.getAttribute('href'));
while (_href.indexOf('{' + k + '}') > 1) {
_len++;
_href = _href.replace('{' + k + '}', json[k]);
}

if (_len) {
_dom.setAttribute('href', _href);
_dom.setAttribute('ishaveK', 1);
}
} else if (_dom.tagName == 'IMG') {
var _src = decodeURI(_dom.getAttribute('src'));
if (typeof json[k] == "string" && (json[k].substr(0, 8) == 'https://' || json[k].substr(0, 7) == 'http://')) {
_src = json[k];
_len++;
} else {
while (_src.indexOf('{' + k + '}') >= 0) {
_src = _src.replace('{' + k + '}', json[k]);
_len++;
}
}

if (_len) {
_dom.setAttribute('src', _src);
_dom.setAttribute('ishaveK', 1);
}
}
if (_dom.getAttribute('ishaveK') == 1) return;; // 说明上面的代码以及处理过了,后续不需要再处理
_back = _dom.getAttribute('kattr'); // _back 这个时候是需要高修改的属性的名称
if (_back) { // 如果是要设置属性,那么这里替换属性中的数值即可
_front = _dom.getAttribute('kval');
if (!_front)
_front = _dom.getAttribute(_back);
while (_front.indexOf('{' + k + '}') != -1) {
_front = _front.replace('{' + k + '}', json[k]);
}
if (_back == 'src' && typeof json[k] == "string" && (json[k].substr(0, 8) == 'https://' || json[k].substr(0, 7) == 'http://')) _front = json[k];
_dom.setAttribute(_back, _front);
_dom.setAttribute('ishaveK', 1);
} else {
if (_dom.tagName == 'SELECT') {
_dom.value = json[k].toString();
//兼容页面k.a 与k_a的情况
if (_dom.id.split('.').length == 2) {
if (document.getElementById(_dom.id.replace(".", "_")))
document.getElementById(_dom.id.replace(".", "_")).value = _dom.value;
}
} else if ((_dom.type === 'text' || _dom.type === 'hidden') && typeof _dom.value === 'string') {
_dom.value = json[k].toString();
//兼容页面k.a 与k_a的情况
if (_dom.id.split('.').length == 2) {
if (document.getElementById(_dom.id.replace(".", "_")))
document.getElementById(_dom.id.replace(".", "_")).value = _dom.value;
}
} else if (_dom.tagName == 'INPUT' && typeof _dom.checked === 'boolean') {
if (_dom.value == json[k]) _dom.checked = true;
else _dom.checked = false;
//兼容页面k.a 与k_a的情况
if (_dom.id.split('.').length == 2) {
if (document.getElementById(_dom.id.replace(".", "_")))
document.getElementById(_dom.id.replace(".", "_")).checked = _dom.checked;
}
} else if (typeof _dom.innerHTML !== 'undefined') {
_front = _dom.getAttribute('front'); // 显示的前缀
_back = _dom.getAttribute('back'); // 显示的后缀
_len = _dom.getAttribute('showlen');
_format = _dom.getAttribute('format');
_default = _dom.getAttribute("default");
if (!_front) _front = '';
if (!_back) _back = '';
if (!_default) _default = '';
if (!_format) _format = '0';
if (!_len) _len = 0;
_len = _len * 1;
if (_len) {
var _start = _dom.getAttribute('showstart');
_start = _start * 1;
if (!_start) _start = 0; // showstart 是截取字符串开始位置
_dom.innerHTML = _front + json[k].toString().substr(_start, _len) + _back;
//兼容页面k.a 与k_a的情况
if (_dom.id.split('.').length == 2) {
if (document.getElementById(_dom.id.replace(".", "_")))
document.getElementById(_dom.id.replace(".", "_")).innerHTML = _dom.innerHTML;
}
} else {
var _s = json[k].toString();

_len = _dom.getAttribute('ooqfw');
if (_len && _len != '' && !isNaN(_len)) {
//_s = moneyStr3(_s, parseInt(_len), '');
//_len = parseInt(_len.substr(2));
//if (_len) sprintf("%" + _len + "s", _s);
if (!isNaN(_s)) {
_s = Number(_s).toFixed(Number(_len));
if (Number(_len) > 0 && _s.indexOf(".") == -1) _s += ".00";
}
}
if (_format * 1 && !isNaN(_s)) {
//需要格式化
_s = Number(_s).toLocaleString();
if (_s.indexOf(".") == -1) _s += ".00";
}

//自动填充内容
if (_default.length > 0 && (!_s || _s.length == 0)) {
_s = _default;
}
_dom.innerHTML = _front + _s + _back;
//兼容页面k.a 与k_a的情况
if (_dom.id.split('.').length == 2) {
if (document.getElementById(_dom.id.replace(".", "_")))
document.getElementById(_dom.id.replace(".", "_")).innerHTML = _front + _s + _back;
}
}
}
}
}
/**
* 根据json数据内每一个层级的数据对象去页面内对应查找ID元素进行赋值
*/
SetItemToK_Id: function(json, _pre) {
if (!_pre) _pre = 'k.';
for (var k in json) {
if (json[k] == null) json[k] = '';
if (typeof json[k] === 'string' || typeof json[k] === 'number') {
var _dom = document.getElementById(_pre + k); // 如果存在同 key 同名的 dom 对象 getElementById 只能获得第一个
if (!_dom && json[k].toString().length < 20) {
_dom = document.getElementById(_pre + k + '_' + json[k]); // 特殊用法用来处理 radio box的情况
}
if (!_dom) _dom = document.getElementById('k_' + k); // 为了兼容老的

if (_dom) {
if (_dom.getAttribute('ismore') == '1') {
var _d = $("[id='" + _dom.id + "']", document); // 这里针对有多个 id 相同的情况处理一下
if (_d.length > 1) {
//_d.html(json[k].toString());
for (var i = 1; i < _d.length; i++) {
this.SetItemDom(_d[i], json, k);
}
}
}
this.SetItemDom(_dom, json, k);
} else if (!_dom && !isNaN(json[k] * 1)) {
_dom = document.getElementsByName(k + '[]'); // 这个情况是 checkbox 按位与的情况
if (_dom) {
for (var i = 0; i < _dom.length; i++) {
if (typeof _dom[i].checked === 'boolean') {
if (_dom[i].value & json[k]) {
_dom[i].checked = true;
} else {
_dom[i].checked = false;
}
}
}
}
}
} else if (json[k] && typeof json[k] === 'object') {
//** 注意 这里跳过了数组,不去遍历数组能节约大量时间,这里一直是效率的瓶颈
if (json[k] instanceof Array) {} else this.SetItemToK_Id(json[k], _pre + k + '.');
}
}
}

时间,数字处理

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

//数字类型保留小数
Number.prototype.toIntDec = function(len) {
if (typeof(len) != "number") len = 2;
var s = (Math.round(this * Math.pow(10, len + 1)) / Math.pow(10, len + 1)) + "";
if (s.indexOf(".") != -1) {
var str = s.substring(0, s.indexOf(".") + len + 1);
return str;
} else {
return s;
}
}
// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子:
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
Date.prototype.Format = function(fmt) { //author: meizz
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(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}