JS常用方法私房菜-笔记-持续整理中
Posted 毛豆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS常用方法私房菜-笔记-持续整理中相关的知识,希望对你有一定的参考价值。
//记录一下前端开发中 JS常用的方法等,持续收集整理中
----------------------------------------------------------
1 //处理键盘事件 禁止后退键(Backspace)密码或单行、多行文本框除外 2 function banBackSpace(e) { 3 var ev = e || window.event;//获取event对象 4 var obj = ev.target || ev.srcElement;//获取事件源 5 var t = obj.type || obj.getAttribute(‘type‘);//获取事件源类型 6 //获取作为判断条件的事件类型 7 var vReadOnly = obj.getAttribute(‘readonly‘); 8 //处理null值情况 9 vReadOnly = (vReadOnly == "") ? false : vReadOnly; 10 //当敲Backspace键时,事件源类型为密码或单行、多行文本的, 11 //并且readonly属性为true或enabled属性为false的,则退格键失效 12 var flag1 = (ev.keyCode == 8 && (t=="password"||t == "text" || t == "textarea")&&vReadOnly=="readonly") ? true : false; 13 //当敲Backspace键时,事件源类型非密码或单行、多行文本的,则退格键失效 14 var flag2 = (ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea")? true : false; 15 //判断 16 if (flag2) { } 17 if (flag1) { 18 return false; 19 } 20 }
1 //处理低版本IE浏览器不支持indexof方法 2 if (!Array.prototype.indexOf) { 3 Array.prototype.indexOf = function (elt /*, from*/) { 4 var len = this.length >>> 0; 5 6 var from = Number(arguments[1]) || 0; 7 from = (from < 0) 8 ? Math.ceil(from) 9 : Math.floor(from); 10 if (from < 0) 11 from += len; 12 13 for (; from < len; from++) { 14 if (from in this && 15 this[from] === elt) 16 return from; 17 } 18 return -1; 19 }; 20 } 21 22 Array.prototype.lastIndexOf = function (item) { 23 var len = this.length; 24 for (var i = len; i >= 0; i--) { 25 if (this[i] === item) { 26 return len - i; 27 } 28 } 29 return -1; 30 }
1 // 打开一个新窗体
//参数说明:
//theURL 打开新窗体的URL
//winName 打开新窗体的名称
// Awidth /Aheight 设定打开新窗体的 宽度/高度
//flag 1,2,3,4,5 分别匹配下面5中情况
2 function openWindow(theURL, winName, Awidth, Aheight, flag) { //v2.0 3 var closeZLwindow; 4 switch (flag) { 5 case 1: 6 { //不能放大缩小,没有滚动条 7 closeZLwindow = window.open(theURL, winName, ‘width=‘ + Awidth + ‘,height=‘ + Aheight + ‘,left=‘ + (screen.width - Awidth) / 2 + ‘,top=‘ + (screen.height - Aheight) / 2); 8 break; 9 } 10 case 2: 11 { //不能放大缩小,但有滚动条 12 closeZLwindow = window.open(theURL, winName, ‘scrollbars=yes,width=‘ + Awidth + ‘,height=‘ + Aheight + ‘,left=‘ + (screen.width - Awidth) / 2 + ‘,top=‘ + (screen.height - Aheight) / 2); 13 break; 14 } 15 case 3: 16 { //全屏 17 closeZLwindow = window.open(theURL, winName, ‘fullscreen=1,width=‘ + Awidth + ‘,height=‘ + Aheight + ‘,left=0,top=0‘); 18 break; 19 } 20 case 4: 21 { 22 closeZLwindow = window.open(theURL, winName, ‘width=‘ + screen.width + ‘,menubar=yes,status=yes,location=yes,menubar=yes,toolbar=yes,resizable=yes,scrollbars=yes,left=0,top=0,height=‘ + screen.height); 23 break; 24 } 25 default: 26 { //可以放大缩小,而且有滚动条 27 closeZLwindow = window.open(theURL, winName, ‘resizable=yes, scrollbars=yes,width=‘ + Awidth + ‘,height=‘ + Aheight + ‘,left=‘ + (screen.width - Awidth) / 2 + ‘,top=‘ + (screen.height - Aheight) / 2); 28 break; 29 } 30 } 31 return closeZLwindow; 32 }
1 //检测是否为中文编码 2 function isChineseInString(str) { 3 for (var i = 0; i < str.length; i++) { 4 var ch = str.charCodeAt(i); 5 if (0x4e00 < ch && ch < 0x9fff) { 6 return true;//是中文 7 } 8 else { 9 return false;//非中文 10 } 11 } 12 }
1 //防止SQL注入//输入敏感字符提示 2 function AntiSqlValid(oField) { 3 re = /select|update|delete|exec|count|’|"|=|;|>|<|%/i; 4 if (re.test(oField.value)) { 5 alert("请您不要在参数中输入特殊字符和SQL关键字!"); //注意中文乱码 6 return false; 7 } 8 }
1 //四则运算方法 2 3 //除法函数,用来得到精确的除法结果 4 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 5 //调用:accDiv(arg1,arg2) 6 //返回值:arg1除以arg2的精确结果 7 function accDiv(arg1, arg2) { 8 var t1 = 0, t2 = 0, r1, r2; 9 try { t1 = arg1.toString().split(".")[1].length } catch (e) { } 10 try { t2 = arg2.toString().split(".")[1].length } catch (e) { } 11 with (Math) { 12 r1 = Number(arg1.toString().replace(".", "")); 13 r2 = Number(arg2.toString().replace(".", "")); 14 return (r1 / r2) * pow(10, t2 - t1); 15 } 16 } 17 //给Number类型增加一个div方法,调用起来更加方便。 18 Number.prototype.div = function (arg) { 19 return accDiv(this, arg); 20 }; 21 //乘法函数,用来得到精确的乘法结果 22 //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 23 //调用:accMul(arg1,arg2) 24 //返回值:arg1乘以arg2的精确结果 25 function accMul(arg1, arg2) { 26 var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); 27 try { m += s1.split(".")[1].length } catch (e) { } 28 try { m += s2.split(".")[1].length } catch (e) { } 29 return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); 30 } 31 //给Number类型增加一个mul方法,调用起来更加方便。 32 Number.prototype.mul = function (arg) { 33 return accMul(arg, this); 34 }; 35 //加法函数,用来得到精确的加法结果 36 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 37 //调用:accAdd(arg1,arg2) 38 //返回值:arg1加上arg2的精确结果 39 function accAdd(arg1, arg2) { 40 var r1, r2, m; 41 try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0; } 42 try { r2 = arg2.toString().split(".")[1].length; } catch (e) { r2 = 0; } 43 m = Math.pow(10, Math.max(r1, r2)); 44 return (arg1 * m + arg2 * m) / m; 45 } 46 //给Number类型增加一个add方法,调用起来更加方便。 47 Number.prototype.add = function (arg) { 48 return accAdd(arg, this); 49 }; 50 //减法函数 51 function accSub(arg1, arg2) { 52 var r1, r2, m, n; 53 try { 54 r1 = arg1.toString().split(".")[1].length; 55 } catch (e) { 56 r1 = 0; 57 } 58 try { 59 r2 = arg2.toString().split(".")[1].length; 60 } catch (e) { 61 r2 = 0; 62 } 63 m = Math.pow(10, Math.max(r1, r2)); 64 //动态控制精度长度 65 n = (r1 >= r2) ? r1 : r2; 66 return ((arg2 * m - arg1 * m) / m).toFixed(n); 67 } 68 ///给number类增加一个sub方法,调用起来更加方便 69 Number.prototype.sub = function (arg) { 70 return accSub(arg, this); 71 };
1 //数字四舍五入到小数点后第几位的方法 2 Number.prototype.toFixed = function (d) { 3 var s = this + ""; if (!d) d = 0; 4 if (s.indexOf(".") == -1) s += "."; s += new Array(d + 1).join("0"); 5 if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) { 6 s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true; 7 if (a == d + 2) { 8 a = s.match(/\d/g); if (parseInt(a[a.length - 1]) > 4) { 9 for (var i = a.length - 2; i >= 0; i--) { 10 a[i] = parseInt(a[i]) + 1; 11 if (a[i] == 10) { a[i] = 0; b = i != 1; } else break; 12 } 13 } 14 s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"), "$1.$2"); 15 } if (b) s = s.substr(1); return (pm + s).replace(/\.$/, ""); 16 } return this + ""; 17 };
1 //* 根据长度截取先使用字符串,超长部分追加… 2 //* str 对象字符串 3 //* len 目标字节长度 4 //* 返回值: 处理结果字符串 5 function cutString(str, len) { 6 //length属性读出来的汉字长度为1 7 if (str.length * 2 <= len) { 8 return str; 9 } 10 var strlen = 0; 11 var s = ""; 12 for (var i = 0; i < str.length; i++) { 13 s = s + str.charAt(i); 14 if (str.charCodeAt(i) > 128) { 15 strlen = strlen + 2; 16 if (strlen >= len) { 17 return s.substring(0, s.length - 1) + "..."; 18 } 19 } else { 20 strlen = strlen + 1; 21 if (strlen >= len) { 22 return s.substring(0, s.length - 2) + "..."; 23 } 24 } 25 } 26 return s; 27 }
1 //去掉数组中重复的元素 2 function unique(arr) { 3 var result = [], hash = {}; 4 for (var i = 0, elem; (elem = arr[i]) != null; i++) { 5 if (!hash[elem]) { 6 result.push(elem); 7 hash[elem] = true; 8 } 9 } 10 return result; 11 }
1 //打开弹出层时禁用滚动条 2 function DisableScrollBar() { 3 $("body").css({ overflow: "hidden" }); 4 } 5 6 //关闭弹出层时激活滚动条 7 function ActivateScrollBar() { 8 $("body").css({ overflow: "auto" }); 9 }
1 //输入框(只能输入整数) 2 function limitNum(e, LimitNumber) { 3 if (e.value.length == 1) { 4 e.value = e.value.replace(/[^0-9]/g, ‘‘); 5 } 6 else { 7 e.value = e.value.replace(/[^\d.]/g, ‘‘); 8 } 9 if (parseInt(e.value) > LimitNumber) { e.value = LimitNumber; } 10 }