1. /**
  2. * 模块名:共通脚本
  3. * 程序名: 通用工具函数
  4. **/
  5.  
  6. var utils = {};
  7.  
  8. /**
  9. * 格式化字符串
  10. * 用法:
  11. .formatString("{0}-{1}","a","b");
  12. */
  13. utils.formatString = function () {
  14. for (var i = 1; i < arguments.length; i++) {
  15. var exp = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
  16. arguments[0] = arguments[0].replace(exp, arguments[i]);
  17. }
  18. return arguments[0];
  19. };
  20.  
  21. /**
  22. * 格式化时间显示方式
  23. * 用法:format="yyyy-MM-dd hh:mm:ss";
  24. */
  25. utils.formatDate = function (v, format) {
  26. if (!v) return "";
  27. var d = v;
  28. if (typeof v === 'string') {
  29. if (v.indexOf("/Date(") > -1)
  30. d = new Date(parseInt(v.replace("/Date(", "").replace(")/", ""), 10));
  31. else
  32. d = new Date(Date.parse(v.replace(/-/g, "/").replace("T", " ").split(".")[0]));//.split(".")[0] 用来处理出现毫秒的情况,截取掉.xxx,否则会出错
  33. }
  34. var o = {
  35. "M+": d.getMonth() + 1, //month
  36. "d+": d.getDate(), //day
  37. "h+": d.getHours(), //hour
  38. "m+": d.getMinutes(), //minute
  39. "s+": d.getSeconds(), //second
  40. "q+": Math.floor((d.getMonth() + 3) / 3), //quarter
  41. "S": d.getMilliseconds() //millisecond
  42. };
  43. if (/(y+)/.test(format)) {
  44. format = format.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length));
  45. }
  46. for (var k in o) {
  47. if (new RegExp("(" + k + ")").test(format)) {
  48. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  49. }
  50. }
  51. return format;
  52. };
  53.  
  54. /**
  55. * 检查是否为年月的日期格式
  56. */
  57. utils.checkYearMonthDate = function (v) {
  58. var reg = /^(\d{4})-(\d{2})$/;
  59. var result = v.match(reg);
  60. if (result == null) {
  61. return false
  62. }
  63. else {
  64. return true
  65. }
  66. };
  67.  
  68. /**
  69. * 检查是否为年月日的日期格式
  70. */
  71. utils.checkYearMonthDayDate = function (v) {
  72. var reg = /^(\d{4})-(\d{2})-(\d{2})$/;
  73. var result = v.match(reg);
  74. if (result == null) {
  75. return false
  76. }
  77. else {
  78. return true
  79. }
  80. };
  81.  
  82. /**
  83. * 格式化数字显示方式
  84. * 用法
  85. * formatNumber(12345.999,'#,##0.00');
  86. * formatNumber(12345.999,'#,##0.##');
  87. * formatNumber(123,'000000');
  88. */
  89. utils.formatNumber = function (v, pattern) {
  90. if (v == null)
  91. return v;
  92. var strarr = v ? v.toString().split('.') : ['0'];
  93. var fmtarr = pattern ? pattern.split('.') : [''];
  94. var retstr = '';
  95. // 整数部分
  96. var str = strarr[0];
  97. var fmt = fmtarr[0];
  98. var i = str.length - 1;
  99. var comma = false;
  100. for (var f = fmt.length - 1; f >= 0; f--) {
  101. switch (fmt.substr(f, 1)) {
  102. case '#':
  103. if (i >= 0) retstr = str.substr(i--, 1) + retstr;
  104. break;
  105. case '0':
  106. if (i >= 0) retstr = str.substr(i--, 1) + retstr;
  107. else retstr = '0' + retstr;
  108. break;
  109. case ',':
  110. comma = true;
  111. retstr = ',' + retstr;
  112. break;
  113. }
  114. }
  115. if (i >= 0) {
  116. if (comma) {
  117. var l = str.length;
  118. for (; i >= 0; i--) {
  119. retstr = str.substr(i, 1) + retstr;
  120. if (i > 0 && ((l - i) % 3) == 0) retstr = ',' + retstr;
  121. }
  122. }
  123. else retstr = str.substr(0, i + 1) + retstr;
  124. }
  125. retstr = retstr + '.';
  126. // 处理小数部分
  127. str = strarr.length > 1 ? strarr[1] : '';
  128. fmt = fmtarr.length > 1 ? fmtarr[1] : '';
  129. i = 0;
  130. for (var f = 0; f < fmt.length; f++) {
  131. switch (fmt.substr(f, 1)) {
  132. case '#':
  133. if (i < str.length) retstr += str.substr(i++, 1);
  134. break;
  135. case '0':
  136. if (i < str.length) retstr += str.substr(i++, 1);
  137. else retstr += '0';
  138. break;
  139. }
  140. }
  141. return retstr.replace(/^,+/, '').replace(/\.$/, '');
  142. };
  143.  
  144. /**
  145. * json格式转树状结构
  146. * @param {json} json数据
  147. * @param {String} id的字符串
  148. * @param {String} 父id的字符串
  149. * @param {String} children的字符串
  150. * @return {Array} 数组
  151. */
  152. utils.toTreeData = function (a, idStr, pidStr, childrenStr) {
  153. var r = [], hash = {}, len = (a || []).length;
  154. for (var i = 0; i < len; i++) {
  155. hash[a[i][idStr]] = a[i];
  156. }
  157. for (var j = 0; j < len; j++) {
  158. var aVal = a[j], hashVP = hash[aVal[pidStr]];
  159. if (hashVP) {
  160. !hashVP[childrenStr] && (hashVP[childrenStr] = []);
  161. hashVP[childrenStr].push(aVal);
  162. } else {
  163. r.push(aVal);
  164. }
  165. }
  166. return r;
  167. };
  168.  
  169. utils.eachTreeRow = function (treeData, eachHandler) {
  170. for (var i in treeData) {
  171. if (eachHandler(treeData[i]) == false) break;
  172. if (treeData[i].children)
  173. utils.eachTreeRow(treeData[i].children, eachHandler);
  174. }
  175. };
  176.  
  177. utils.isInChild = function (treeData, pid, id) {
  178. var isChild = false;
  179. utils.eachTreeRow(treeData, function (curNode) {
  180. if (curNode.id == pid) {
  181. utils.eachTreeRow([curNode], function (row) {
  182. if (row.id == id) {
  183. isChild = true;
  184. return false;
  185. }
  186. });
  187. return false;
  188. }
  189. });
  190. return isChild;
  191. };
  192.  
  193. utils.fnValueToText = function (list, value, text) {
  194. var map = {};
  195. for (var i in list) {
  196. map[list[i][value || 'value']] = list[i][text || 'text'];
  197. }
  198. var fnConvert = function (v, r) {
  199. return map[v];
  200. };
  201. return fnConvert;
  202. };
  203.  
  204. utils.compareObject = function (v1, v2) {
  205. var countProps = function (obj) {
  206. var count = 0;
  207. for (k in obj) if (obj.hasOwnProperty(k)) count++;
  208. return count;
  209. };
  210.  
  211. if (typeof (v1) !== typeof (v2)) {
  212. return false;
  213. }
  214.  
  215. if (typeof (v1) === "function") {
  216. return v1.toString() === v2.toString();
  217. }
  218.  
  219. if (v1 instanceof Object && v2 instanceof Object) {
  220. if (countProps(v1) !== countProps(v2)) {
  221. return false;
  222. }
  223. var r = true;
  224. for (k in v1) {
  225. r = utils.compareObject(v1[k], v2[k]);
  226. if (!r) {
  227. return false;
  228. }
  229. }
  230. return true;
  231. } else {
  232. return v1 === v2;
  233. }
  234. };
  235.  
  236. utils.minusArray = function (arr1, arr2) {
  237. var arr = [];
  238. for (var i in arr1) {
  239. var b = true;
  240. for (var j in arr2) {
  241. if (utils.compareObject(arr1[i], arr2[j])) {
  242. b = false;
  243. break;
  244. }
  245. }
  246. if (b) {
  247. arr.push(arr1[i]);
  248. }
  249. }
  250. return arr;
  251. };
  252.  
  253. utils.diffrence = function (obj1, obj2, reserve, ignore) {
  254. var obj = {}, reserve = reserve || [], ignore = ignore || [], reserveMap = {}, ignoreMap = {};
  255. for (var i in reserve)
  256. reserveMap[reserve[i]] = true;
  257.  
  258. for (var i in ignore)
  259. ignoreMap[ignore[i]] = true;
  260.  
  261. for (var k in obj1) {
  262. if (!ignoreMap[k] && (obj1[k] != obj2[k] || reserveMap[k])) {
  263. obj[k] = obj1[k];
  264. }
  265. }
  266. return obj;
  267. };
  268.  
  269. utils.filterProperties = function (obj, props, ignore) {
  270. var ret;
  271. if (obj instanceof Array || Object.prototype.toString.call(obj) === "[object Array]") {
  272. ret = [];
  273. for (var k in obj) {
  274. ret.push(utils.filterProperties(obj[k], props, ignore));
  275. }
  276. }
  277. else if (typeof obj === 'object') {
  278. ret = {};
  279. if (ignore) {
  280. var map = {};
  281. for (var k in props)
  282. map[props[k]] = true;
  283.  
  284. for (var i in obj) {
  285. if (!map[i]) ret[i] = obj[i];
  286. }
  287. }
  288. else {
  289. for (var i in props) {
  290. var arr = props[i].split(" as ");
  291. ret[arr[1] || arr[0]] = obj[arr[0]];
  292. }
  293. }
  294. }
  295. else {
  296. ret = obj;
  297. }
  298. return ret;
  299. };
  300.  
  301. utils.copyProperty = function (obj, sourcePropertyName, newPropertyName, overWrite) {
  302. if (obj instanceof Array || Object.prototype.toString.call(obj) === "[object Array]") {
  303. for (var k in obj)
  304. utils.copyProperty(obj[k], sourcePropertyName, newPropertyName);
  305. }
  306. else if (typeof obj === 'object') {
  307. if (sourcePropertyName instanceof Array || Object.prototype.toString.call(sourcePropertyName) === "[object Array]") {
  308. for (var i in sourcePropertyName) {
  309. utils.copyProperty(obj, sourcePropertyName[i], newPropertyName[i]);
  310. }
  311. }
  312. else if (typeof sourcePropertyName === 'string') {
  313. if ((obj[newPropertyName] && overWrite) || (!obj[newPropertyName]))
  314. obj[newPropertyName] = obj[sourcePropertyName];
  315. }
  316. }
  317. return obj;
  318. };
  319.  
  320. utils.clearIframe = function (context) {
  321. var frame = $('iframe', context).add(parent.$('iframe', context));
  322. if (frame.length > 0) {
  323. frame[0].contentWindow.document.write('');
  324. frame[0].contentWindow.close();
  325. frame.remove();
  326. if ($.browser.msie) {
  327. CollectGarbage();
  328. }
  329. }
  330. };
  331.  
  332. utils.getThisIframe = function () {
  333. if (!parent) return null;
  334. var iframes = parent.document.getElementsByTagName('iframe');
  335. if (iframes.length == 0) return null;
  336. for (var i = 0; i < iframes.length; ++i) {
  337. var iframe = iframes[i];
  338. if (iframe.contentWindow === self) {
  339. return iframe;
  340. }
  341. }
  342. return null;
  343. }
  344.  
  345. utils.functionComment = function (fn) {
  346. return fn.toString().replace(/^.*\r?\n?.*\/\*|\*\/([.\r\n]*).+?$/gm, '');
  347. };
  348.  
  349. utils.uuid = (function () { var a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""); return function (b, f) { var h = a, e = [], d = Math.random; f = f || h.length; if (b) { for (var c = 0; c < b; c++) { e[c] = h[0 | d() * f]; } } else { var g; e[8] = e[13] = e[18] = e[23] = "-"; e[14] = "4"; for (var c = 0; c < 36; c++) { if (!e[c]) { g = 0 | d() * 16; e[c] = h[(c == 19) ? (g & 3) | 8 : g & 15]; } } } return e.join("").toLowerCase(); }; })();
  350.  
  351. utils.getRequest = function (name, url) {
  352. var url = url || window.location.href;
  353. var theRequest = new Object();
  354. if (url.indexOf("?") != -1) {
  355. var str = url.split("?")[1];
  356. strs = str.split("&");
  357. for (var i = 0; i < strs.length; i++) {
  358. theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
  359. }
  360. }
  361. return theRequest[name];
  362. };
  363.  
  364. //JOSN数组去重的算法 JS
  365. utils.unique = function (arr) {
  366. var result = [], hash = {};
  367. for (var i = 0, elem; (elem = arr[i]) != null; i++) {
  368. if (!hash[elem]) {
  369. result.push(elem);
  370. hash[elem] = true;
  371. }
  372. }
  373. return result;
  374. }
  375.  
  376. //四舍五入,保留小数位
  377. utils.xround = function (x, num) {
  378. x = Math.round(x * Math.pow(10, num)) / Math.pow(10, num);
  379. return x;
  380. }
  381.  
  382. //获取地址栏参数
  383. utils.GetQueryString = function (name) {
  384. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  385. var r = window.location.search.substr(1).match(reg);
  386. if (r != null) return unescape(r[2]); return null;
  387. }

共通脚本utils的更多相关文章

  1. 一个共通的viewModel搞定所有的编辑页面-经典ERP录入页面(easyui + knockoutjs + mvc4.0)

    http://www.cnblogs.com/xqin/archive/2013/06/06/3120887.html 前言 我写代码喜欢提取一些共通的东西出来,之前的一篇博客中说了如何用一个共通的v ...

  2. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  3. 一个共通的viewModel搞定所有的分页查询一览及数据导出(easyui + knockoutjs + mvc4.0)

    前言 大家看标题就明白了我想写什么了,在做企业信息化系统中可能大家写的最多的一种页面就是查询页面了.其实每个查询页面,除了条件不太一样,数据不太一样,其它的其实都差不多.所以我就想提取一些共通的东西出 ...

  4. List排序共通代码

    此共通方法可以根据特定字段进行排序 package com.gomecar.index.common.utils; import java.lang.reflect.Method; import ja ...

  5. 共通css初次尝试

    1.网页的主要的html <@fn.html css=["${basePath}/css/help/guideCommon.css${versionControl}"]tit ...

  6. C#验证对象中的属性是否为空的共通方法

    在后台接口处理时,经常需要对请求的参数做验证.因此提取了共通方法,方便进行判断. /// <summary> /// 数据验证工具类 /// </summary> public ...

  7. js中获取URL参数的共通方法getRequest()方法

    getRequest : function() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new ...

  8. STL_容器共通能力

    1. 来自教程: ◆ 所有容器提供的都是值(value)语意,而非引用(reference)语意.容器执行插入元素的操作时,内部实施拷贝动作.所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造 ...

  9. 【Python】自动化测试框架-共通方法汇总

    1.滚动滚动条(有的时候页面元素element取得对但是并没有回显正确的数据,可能是因为页面第一次加载很慢,所以页面可能做了滚动到哪里就加载到哪里的效果,此刻我们就需要用到滚动条自动滚动这段代码让页面 ...

随机推荐

  1. 【Python 23】52周存钱挑战3.0(循环计数for与range)

    1.案例描述 按照52周存钱法,存钱人必须在一年52周内,每周递存10元.例如,第一周存10元,第二周存20元,第三周存30元,直到第52周存520元. 记录52周后能存多少钱?即10+20+30+. ...

  2. git 忽略 .idea文件

    多人开发时,会出现明明在gitignore中忽略了.idea文件夹,但是提交时仍旧会出现.idea内文件变动的情况 原因.idea已经被git跟踪,之后再加入.gitignore后是没有作用的 解决办 ...

  3. 3.15 总结,初始java

  4. 面向对象内置方法之--__str__、__call__、__del__

    __str__: 在对象被打印的时候触发,可以用来定义对象被打印的输出格式 __del__:在对象被删除的时候触发,可以 用来回收对象以外的其他相关资源,比如系统资源等. __call__:在对象呗调 ...

  5. MongoDB 创建基础索引、组合索引、唯一索引以及优化

    一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样.其实可以这样说说,索引 ...

  6. eclipse换工作空间站快捷键失效解决

    1.找到你可以用快捷键的eclipse的空间所在目录.2.复制.metadata文件.3.找到不可用快捷键的空间目录,把之前复制的文件夹覆盖到现在的.4.重启eclipse.

  7. 基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件

    目录 1. 前言 2. 关于vue-simple-uploader 3. 基于vue-simple-uploader封装全局上传组件 4. 文件上传流程概览 5. 文件分片 6. MD5的计算过程 7 ...

  8. Linux静态库与动态库制作过程

    文件:tobigchar.c   mian.c   tobigchar.h //tobigchar.c char tos() { char ch; ch = getchar(); if(ch > ...

  9. 控制结构(3): 状态机(state machine)

    // 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...

  10. Oracle普通视图和物化视图的区别

    介绍 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询, Oracle 都实际上转换为视图SQL语句的查询. ...