import Vue from "vue";/** * element-input 输出限度 * *///v-positiveInteger 正整数//v-positiveInteger.2 保留两位小数//v-positiveInteger.4 保留四位小数Vue.directive("positiveInteger", { bind(el, binding, vnode) { let dom = findDom(el, "el-input__inner"); let modifiers = binding.modifiers let mantissa = 0 for (let x in modifiers) { mantissa = x } el.handler = function () { if (vnode.inputLocking) { return; } if(mantissa) { let reg = new RegExp(`^\\D*(\\d*(?:\.\\d{0,${mantissa}})?).*$`, 'gmi') el.childNodes[1].value = el.childNodes[1].value.replace(reg, "$1"); }else { el.childNodes[1].value = el.childNodes[1].value.replace(/\D+/g, ""); } }; dom.addEventListener("compositionstart", () => { vnode.inputLocking = true; }); dom.addEventListener("compositionend", () => { vnode.inputLocking = false; dom.dispatchEvent(new Event("input")); }); dom.onfocus = function () { if (dom.value == 0) { dom.value = ""; } }; el.addEventListener("keyup", el.handler); el.handler1 = function () { el.childNodes[1].value = el.childNodes[1].value; dom.dispatchEvent(new Event("input")); }; el.childNodes[1].addEventListener("blur", el.handler1); }, unbind(el) { el.removeEventListener("keyup", el.handler); el.childNodes[1].removeEventListener("blur", el.handler); },});//递归查找某个元素节点function findDom(el, className) { let dom; for (let i = 0; i < el.childNodes.length; i++) { if (el.childNodes[i].nodeType == 1) { let str = el.childNodes[i].getAttribute("class"); if (str.indexOf(className) > -1) { dom = el.childNodes[i]; break; } else { dom = findDom(el.childNodes[i], className); } } } return dom;}
参考文章