script
const formData = ref{
content: '各分公司资产管理岗:\n 根据《通知》每月报送相关信息的要求,现将报送{{数据期间}}营业职场情况通知如下:\n 一、时间要求:请务必于{{填报截止日期}}前报送并核对完毕。过时将关闭系统,无法修改...'
}
const myContent = document.querySelector('#myContent')
// 选择方法
const selectContent = (event) => {
if (timer) {
clearTimeout(timer)
timer = null
}
const selectionStart = event.target.selectionStart
const selectionEnd = event.target.selectionEnd
let text = formData.value.content
const regex = /\{{([^}]+)\}}/g
const matches = [...text.matchAll(regex)]
const results = matches.map(i => ({
content: i[0],
startIndex: i.index,
endIndex: i.index + i[0].length
}))
for (let i of results) {
if (selectionStart === selectionEnd) {
if (selectionStart >= i.startIndex && selectionEnd <= i.endIndex) {
// 当光标处于变量词组内部,选中整个词组
timer = setTimeout(() => {
myContent.setSelectionRange(i.startIndex, i.endIndex)
// 处理键盘向左向右切换
if (event.code === 'ArrowLeft' && selectionStart === i.startIndex) {
myContent.setSelectionRange(i.startIndex - 1, i.startIndex - 1)
} else if (event.code === 'ArrowRight' && selectionEnd === i.endIndex) {
myContent.setSelectionRange(i.endIndex + 1, i.endIndex + 1)
}
}, 200)
}
} else if ((selectionStart >= i.startIndex && selectionStart <= i.endIndex) || (selectionEnd >= i.startIndex && selectionEnd <= i.endIndex)) {
// 当光标处于变量词组内部,选中整个词组
timer = setTimeout(() => {
myContent.setSelectionRange(i.startIndex, i.endIndex)
}, 200)
}
}
}
// 插入变量
const insertText = async (myValue) => {
if (myContent.selectionStart || myContent.selectionStart === 0) {
const startPos = myContent.selectionStart
const endPos = myContent.selectionEnd
formData.value.content = myContent.value.substring(0, startPos) + myValue + myContent.value.substring(endPos, myContent.value.length)
await nextTick() // 这里是重点
myContent.setSelectionRange(endPos + myValue.length, endPos + myValue.length)
} else {
formData.value.content += myValue
}
}
template
<a-textarea v-model:value="formData.content" id="myContent" autoSize @keyup="selectContent" @click="selectContent" />
<a-button @click="insertText('{{数据期间}}')">插入变量</a-button>
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。