项目中常用js方法整理common.js

抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧。

  1. var h = {};
  2. h.get = function (url, data, ok, error) {
  3. $.ajax({
  4. url: url,
  5. data: data,
  6. dataType: 'json',
  7. success: ok,
  8. error: error
  9. });
  10. }
  11. h.post = function (url, data, ok, error) {
  12. $.ajax({
  13. url: url,
  14. data: data,
  15. type: 'post',
  16. dataType: 'json',
  17. success: ok,
  18. error: error
  19. });
  20. }
  21. //获取url参数
  22. h.url = function (url) {
  23. if (!url) {
  24. url = location.search.substring(1);
  25. } else {
  26. url = url.substr(url.indexOf('?') + 1);
  27. }
  28. var args = new Object();   // 声明并初始化一个 "类"
  29. // 获得地址(URL)"?"后面的字符串.
  30. var query = decodeURI(url);
  31. var pairs = query.split("&");  // 分割URL(别忘了'&'是用来连接下一个参数)
  32. for (var i = 0; i < pairs.length; i++) {
  33. var pos = pairs[i].indexOf('=');
  34. if (pos == -1) continue; // 它在找有等号的 数组[i]
  35. var argname = pairs[i].substring(0, pos); // 参数名字
  36. var value = pairs[i].substring(pos + 1);  // 参数值
  37. // 以键值对的形式存放到"args"对象中
  38. args[argname] = decodeURI(value);
  39. }
  40. return args;
  41. }
  42. // 返回字符串的实际长度, 一个汉字算2个长度
  43. String.prototype.strlen = function () {
  44. return this.replace(/[^\x00-\xff]/g, "**").length;
  45. }
  46. //字符串超出省略
  47. String.prototype.cutstr = function (len) {
  48. var restr = this;
  49. var wlength = this.replace(/[^\x00-\xff]/g, "**").length;
  50. if (wlength > len) {
  51. for (var k = len / 2; k < this.length; k++) {
  52. if (this.substr(0, k).replace(/[^\x00-\xff]/g, "**").length >= len) {
  53. restr = this.substr(0, k) + "...";
  54. break;
  55. }
  56. }
  57. }
  58. return restr;
  59. }
  60. //替换全部
  61. String.prototype.replaceAll = function (s1, s2) {
  62. return this.replace(new RegExp(s1, "gm"), s2)
  63. }
  64. //字符串去空格
  65. String.prototype.trim = function () {
  66. return this.replace(/(^\s*)|(\s*$)/g, "");
  67. }
  68. String.prototype.trimAll = function () {
  69. return this.replace(/\s+/g, "");
  70. }
  71. String.prototype.lTrim = function () {
  72. return this.replace(/(^\s*)/g, "");
  73. }
  74. String.prototype.rTrim = function () {
  75. return this.replace(/(\s*$)/g, "");
  76. }
  77. //判断是否以某个字符串开头
  78. String.prototype.startWith = function (s) {
  79. return this.indexOf(s) == 0
  80. }
  81. //判断是否以某个字符串结束
  82. String.prototype.endWith = function (s) {
  83. var d = this.length - s.length;
  84. return (d >= 0 && this.lastIndexOf(s) == d)
  85. }
  86. //删除数组中存在重复的元素
  87. function getUnique(someArray) {
  88. tempArray = someArray.slice(0); //复制数组到临时数组
  89. for (var i = 0; i < tempArray.length; i++) {
  90. for (var j = i + 1; j < tempArray.length;) {
  91. if (tempArray[j] == tempArray[i])
  92. //后面的元素若和待比较的相同,则删除并计数;
  93. //删除后,后面的元素会自动提前,所以指针j不移动
  94. {
  95. tempArray.splice(j, 1);
  96. }
  97. else {
  98. j++;
  99. }
  100. //不同,则指针移动
  101. }
  102. }
  103. return tempArray;
  104. }
  105. //判断数组中是否存在重复的元素
  106. function confirmRepeat(someArray) {
  107. tempArray = someArray.slice(0); //复制数组到临时数组
  108. for (var i = 0; i < tempArray.length; i++) {
  109. for (var j = i + 1; j < tempArray.length;) {
  110. if (tempArray[j] == tempArray[i])
  111. //后面的元素若和待比较的相同,则删除并计数;
  112. //删除后,后面的元素会自动提前,所以指针j不移动
  113. {
  114. return true;
  115. }
  116. else {
  117. j++;
  118. }
  119. //不同,则指针移动
  120. }
  121. }
  122. return false;
  123. }
  124. //判断某个值是否在数组中
  125. Array.prototype.in_array = function (e) {
  126. for (i = 0; i < this.length; i++) {
  127. if (this[i] == e)
  128. return true;
  129. }
  130. return false;
  131. }
  132. //判断某个值在数组中的位置
  133. Array.prototype.indexOf = function (e) {
  134. for (i = 0; i < this.length; i++) {
  135. if (this[i] == e)
  136. return i;
  137. }
  138. return -1;
  139. }
  140. //转义html标签
  141. function HtmlEncode(text) {
  142. return text.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>')
  143. }
  144. //格式化日期 DateFormat('yyyy_MM_dd hh:mm:ss:SS 星期w 第q季度')
  145. function DateFormat(format, date) {
  146. if (!date) {
  147. date = new Date();
  148. }
  149. var Week = ['日', '一', '二', '三', '四', '五', '六'];
  150. var o = {
  151. "y+": date.getYear(), //year
  152. "M+": date.getMonth() + 1, //month
  153. "d+": date.getDate(), //day
  154. "h+": date.getHours(), //hour
  155. "H+": date.getHours(), //hour
  156. "m+": date.getMinutes(), //minute
  157. "s+": date.getSeconds(), //second
  158. "q+": Math.floor((date.getMonth() + 3) / 3), //quarter
  159. "S": date.getMilliseconds(), //millisecond
  160. "w": Week[date.getDay()]
  161. }
  162. if (/(y+)/.test(format)) {
  163. format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  164. }
  165. for (var k in o) {
  166. if (new RegExp("(" + k + ")").test(format)) {
  167. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  168. }
  169. }
  170. return format;
  171. }
  172. //设置cookie值
  173. function setCookie(name, value, Hours) {
  174. var d = new Date();
  175. var offset = 8;
  176. var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
  177. var nd = utc + (3600000 * offset);
  178. var exp = new Date(nd);
  179. exp.setTime(exp.getTime() + Hours * 60 * 60 * 1000);
  180. document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.toGMTString() + ";domain=360doc.com;"
  181. }
  182. //获取cookie值
  183. function getCookie(name) {
  184. var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
  185. if (arr != null) return unescape(arr[2]);
  186. return null
  187. }
  188. //加入收藏夹
  189. function AddFavorite(sURL, sTitle) {
  190. try {
  191. window.external.addFavorite(sURL, sTitle)
  192. } catch (e) {
  193. try {
  194. window.sidebar.addPanel(sTitle, sURL, "")
  195. } catch (e) {
  196. alert("加入收藏失败,请使用Ctrl+D进行添加")
  197. }
  198. }
  199. }
  200. //设为首页
  201. function setHomepage(homeurl) {
  202. if (document.all) {
  203. document.body.style.behavior = 'url(#default#homepage)';
  204. document.body.setHomePage(homeurl)
  205. } else if (window.sidebar) {
  206. if (window.netscape) {
  207. try {
  208. netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
  209. } catch (e) {
  210. alert("该操作被浏览器拒绝,如果想启用该功能,请在地址栏内输入about:config,然后将项 signed.applets.codebase_principal_support 值该为true");
  211. }
  212. }
  213. var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
  214. prefs.setCharPref('browser.startup.homepage', homeurl)
  215. }
  216. }
  217. //跨浏览器绑定事件
  218. function addEventSamp(obj, evt, fn) {
  219. if (!oTarget) { return; }
  220. if (obj.addEventListener) {
  221. obj.addEventListener(evt, fn, false);
  222. } else if (obj.attachEvent) {
  223. obj.attachEvent('on' + evt, fn);
  224. } else {
  225. oTarget["on" + sEvtType] = fn;
  226. }
  227. }
  228. //跨浏览器删除事件
  229. function delEvt(obj, evt, fn) {
  230. if (!obj) { return; }
  231. if (obj.addEventListener) {
  232. obj.addEventListener(evt, fn, false);
  233. } else if (oTarget.attachEvent) {
  234. obj.attachEvent("on" + evt, fn);
  235. } else {
  236. obj["on" + evt] = fn;
  237. }
  238. }
  239. //判断是否移动设备访问
  240. function isMobileUserAgent() {
  241. return (/iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase()));
  242. }
  243. //完美判断是否为网址
  244. function IsURL(strUrl) {
  245. var regular = /^\b(((https?|ftp):\/\/)?[-a-z0-9]+(\.[-a-z0-9]+)*\.(?:com|edu|gov|int|mil|net|org|biz|info|name|museum|asia|coop|aero|[a-z][a-z]|((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d))\b(\/[-a-z0-9_:\@&?=+,.!\/~%\$]*)?)$/i
  246. if (regular.test(strUrl)) {
  247. return true;
  248. } else {
  249. return false;
  250. }
  251. }
  252. //获取页面高度
  253. function getPageHeight() {
  254. var g = document, a = g.body, f = g.documentElement, d = g.compatMode == "BackCompat" ? a : g.documentElement;
  255. return Math.max(f.scrollHeight, a.scrollHeight, d.clientHeight);
  256. }
  257. //获取页面宽度
  258. function getPageWidth() {
  259. var g = document, a = g.body, f = g.documentElement, d = g.compatMode == "BackCompat" ? a : g.documentElement;
  260. return Math.max(f.scrollWidth, a.scrollWidth, d.clientWidth);
  261. }
  262. //获取页面可视宽度
  263. function getPageViewWidth() {
  264. var d = document, a = d.compatMode == "BackCompat"
  265. ? d.body
  266. : d.documentElement;
  267. return a.clientWidth;
  268. }
  269. //获取页面可视高度
  270. function getPageViewHeight() {
  271. var d = document, a = d.compatMode == "BackCompat"
  272. ? d.body
  273. : d.documentElement;
  274. return a.clientHeight;
  275. }
  276. //获取页面scrollLeft
  277. function getPageScrollLeft() {
  278. var a = document;
  279. return a.documentElement.scrollLeft || a.body.scrollLeft;
  280. }
  281. //获取页面scrollTop
  282. function getPageScrollTop() {
  283. var a = document;
  284. return a.documentElement.scrollTop || a.body.scrollTop;
  285. }
  286. //获取窗体可见范围的宽与高
  287. function getViewSize() {
  288. var de = document.documentElement;
  289. var db = document.body;
  290. var viewW = de.clientWidth == 0 ? db.clientWidth : de.clientWidth;
  291. var viewH = de.clientHeight == 0 ? db.clientHeight : de.clientHeight;
  292. return Array(viewW, viewH);
  293. }
  294. //随机数时间戳
  295. function uniqueId() {
  296. var a = Math.random, b = parseInt;
  297. return Number(new Date()).toString() + b(10 * a()) + b(10 * a()) + b(10 * a());
  298. }
  299. //获取网页被卷去的位置
  300. function getScrollXY() {
  301. return document.body.scrollTop ? {
  302. x: document.body.scrollLeft,
  303. y: document.body.scrollTop
  304. } : {
  305. x: document.documentElement.scrollLeft,
  306. y: document.documentElement.scrollTop
  307. }
  308. }
  309. //匹配国内电话号码(0511-4405222 或 021-87888822)
  310. function istell(str) {
  311. var result = str.match(/\d{3}-\d{8}|\d{4}-\d{7}/);
  312. if (result == null) return false;
  313. return true;
  314. }
  315. //匹配身份证(15位或18位)
  316. function isidcard(str) {
  317. var result = str.match(/\d{15}|\d{18}/);
  318. if (result == null) return false;
  319. return true;
  320. }
  321. //移动电话
  322. function checkMobile(str) {
  323. if (!(/^1[3|5|8][0-9]\d{4,8}$/.test(str))) {
  324. return false;
  325. }
  326. return true;
  327. }
  328. // 判断输入是否是一个由 0-9 / A-Z / a-z 组成的字符串
  329. function isalphanumber(str) {
  330. var result = str.match(/^[a-zA-Z0-9]+$/);
  331. if (result == null) return false;
  332. return true;
  333. }
  334. // 判断输入是否是有效的电子邮件
  335. function isemail(str) {
  336. var result = str.match(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/);
  337. if (result == null) return false;
  338. return true;
  339. }
  340. //金额大写转换函数 transform('123431233132.23')
  341. function transform(tranvalue) {
  342. try {
  343. var i = 1;
  344. var dw2 = new Array("", "万", "亿"); //大单位
  345. var dw1 = new Array("拾", "佰", "仟"); //小单位
  346. var dw = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //整数部分用
  347. //以下是小写转换成大写显示在合计大写的文本框中
  348. //分离整数与小数
  349. var source = splits(tranvalue);
  350. var num = source[0];
  351. var dig = source[1];
  352. //转换整数部分
  353. var k1 = 0; //计小单位
  354. var k2 = 0; //计大单位
  355. var sum = 0;
  356. var str = "";
  357. var len = source[0].length; //整数的长度
  358. for (i = 1; i <= len; i++) {
  359. var n = source[0].charAt(len - i); //取得某个位数上的数字
  360. var bn = 0;
  361. if (len - i - 1 >= 0) {
  362. bn = source[0].charAt(len - i - 1); //取得某个位数前一位上的数字
  363. }
  364. sum = sum + Number(n);
  365. if (sum != 0) {
  366. str = dw[Number(n)].concat(str); //取得该数字对应的大写数字,并插入到str字符串的前面
  367. if (n == '0') sum = 0;
  368. }
  369. if (len - i - 1 >= 0) { //在数字范围内
  370. if (k1 != 3) { //加小单位
  371. if (bn != 0) {
  372. str = dw1[k1].concat(str);
  373. }
  374. k1++;
  375. } else { //不加小单位,加大单位
  376. k1 = 0;
  377. var temp = str.charAt(0);
  378. if (temp == "万" || temp == "亿") //若大单位前没有数字则舍去大单位
  379. str = str.substr(1, str.length - 1);
  380. str = dw2[k2].concat(str);
  381. sum = 0;
  382. }
  383. }
  384. if (k1 == 3) { //小单位到千则大单位进一
  385. k2++;
  386. }
  387. }
  388. //转换小数部分
  389. var strdig = "";
  390. if (dig != "") {
  391. var n = dig.charAt(0);
  392. if (n != 0) {
  393. strdig += dw[Number(n)] + "角"; //加数字
  394. }
  395. var n = dig.charAt(1);
  396. if (n != 0) {
  397. strdig += dw[Number(n)] + "分"; //加数字
  398. }
  399. }
  400. str += "元" + strdig;
  401. } catch (e) {
  402. return "0元";
  403. }
  404. return str;
  405. }
  406. //拆分整数与小数
  407. function splits(tranvalue) {
  408. var value = new Array('', '');
  409. temp = tranvalue.split(".");
  410. for (var i = 0; i < temp.length; i++) {
  411. value = temp;
  412. }
  413. return value;
  414. }
  415. //格式化数字
  416. function number_format(number, decimals, dec_point, thousands_sep) {
  417. /*
  418. * 参数说明:
  419. * number:要格式化的数字
  420. * decimals:保留几位小数
  421. * dec_point:小数点符号
  422. * thousands_sep:千分位符号
  423. * */
  424. number = (number + '').replace(/[^0-9+-Ee.]/g, '');
  425. var n = !isFinite(+number) ? 0 : +number,
  426. prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
  427. sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
  428. dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
  429. s = '',
  430. toFixedFix = function (n, prec) {
  431. var k = Math.pow(10, prec);
  432. return '' + Math.ceil(n * k) / k;
  433. };
  434. s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
  435. var re = /(-?\d+)(\d{3})/;
  436. while (re.test(s[0])) {
  437. s[0] = s[0].replace(re, "$1" + sep + "$2");
  438. }
  439. if ((s[1] || '').length < prec) {
  440. s[1] = s[1] || '';
  441. s[1] += new Array(prec - s[1].length + 1).join('0');
  442. }
  443. return s.join(dec);
  444. }
上一篇:关于CASE WHEN的多条件汇总问题


下一篇:单元测试系列之十:Sonar 常用代码规则整理(二)