v-angle // input框输入全角字符时触发该指令转化为半角字符
Vue.directive('angle', {
inserted: function (el, binding, vnode) {
el.children[0].value = binding.value
let angleValue = el.children[0]
el.addEventListener('keyup', function (e) {
e = e || window.event
let str = angleValue.value
let tmp = ''
str = str.replace(/:/g, ':')
str = str.replace(/。/g, '.')
str = str.replace(/“/g, '"')
str = str.replace(/”/g, '"')
str = str.replace(/【/g, '[')
str = str.replace(/】/g, ']')
str = str.replace(/《/g, '<')
str = str.replace(/》/g, '>')
str = str.replace(/,/g, ',')
str = str.replace(/?/g, '?')
str = str.replace(/、/g, ',')
str = str.replace(/;/g, ';')
str = str.replace(/(/g, '(')
str = str.replace(/)/g, ')')
str = str.replace(/‘/g, "'")
str = str.replace(/’/g, "'")
str = str.replace(/『/g, '[')
str = str.replace(/』/g, ']')
str = str.replace(/「/g, '[')
str = str.replace(/」/g, ']')
str = str.replace(/﹃/g, '[')
str = str.replace(/﹄/g, ']')
str = str.replace(/〔/g, '{')
str = str.replace(/〕/g, '}')
str = str.replace(/—/g, '-')
str = str.replace(/·/g, '.')
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) === 12288) {
tmp += String.fromCharCode(str.charCodeAt(i) - 12256)
continue
}
if (str.charCodeAt(i) > 65280 && str.charCodeAt(i) < 65375) {
tmp += String.fromCharCode(str.charCodeAt(i) - 65248)
} else {
tmp += String.fromCharCode(str.charCodeAt(i))
}
}
vnode.data.model.callback(tmp)
})
}
})
使用
<el-input
v-angle="value"
v-model="value"/>