工程项目中的常用功能,属于工具类,一般放到utils.js
获取getUrlParam
function getUrlParam(name) { var reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`); // 构造一个含有目标参数的正则表达式对象 var r = window.location.href.match(/\?[^\?]*$/)[0].slice(1).match(reg); // 匹配目标参数 if (r) return +unescape(r[2]); //解码字符串 return null; }
//如果参数中带#号,就会出现问题,参考如下:
function getUrlParams(name) { // 不传name返回所有值,否则返回对应值
let localurl = window.location.href
if (localurl.indexOf('?') < 0) { return false }
url = localurl.split('?')[1]
if(url.indexOf('&')>0){
url = url.split('&')
}else{
url = [localurl.split('?')[1]]
}
name = name || ''
let nameres
// 获取全部参数及其值
for (let i = 0; i < url.length; i++) {
const info = url[i].split('=')
const obj = {}
obj[info[0]] = decodeURI(info[1])
url[i] = obj
}
// 如果传入一个参数名称,就匹配其值
if (name) {
for (let i = 0; i < url.length; i++) {
for (const key in url[i]) {
if (key === name) {
nameres = url[i][key]
}
}
}
} else {
nameres = url
}
// 返回结果
return nameres
}
手动实现bind函数,已经考虑了函数柯里化及作为构造函数,用new命令使用时亦兼容
1 Function.prototype.bind2 = function (content) { 2 if (typeof this !== "function") { 3 throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); 4 }; 5 6 var args = Array.prototype.slice.call(arguments, 1), 7 F = function () { }, 8 self = this, 9 10 bound = function () { 11 var innerArgs = Array.prototype.slice.call(arguments); 12 var finalArgs = args.concat(innerArgs); 13 return self.apply((this instanceof F ? this : content), finalArgs) //检测是否使用了new 命令构造函数 14 } 15 F.prototype = self.prototype; 16 bound.prototype = new F(); 17 18 return bound; 19 }
7.限制input框只能输入数字
onkeypress="return /[\d]/.test(String.fromCharCode(event.keyCode))"
@keyup="form.store_size=form.store_size.replace(/[^\d]/,'')"
扩展:Vue
<input v-model.number="numCheck" type="number" step="1" /> 干掉默认样式
antDesign
8.禁用文本框的n多方法
1.属性 disabled=true;
2.readonly=true;
3.onfocus=this.blur(); //即获得焦点时失去焦点
4.input.maxLength=0;
5.onkeypress(onkeydown,)=function(){return false;} //onkeyup并不起作用,原因见下文
限制input输入类型(多种方法实现)
来自 <https://www.cnblogs.com/eaysun/p/5490603.html>