今天在做markwodn组件,想实现,按下tab键,开头填充2个空格,但是光标会移动到文本末尾,不符合需求
然后了解到selectionStart属性
if (e.code === "Tab") {
e.preventDefault();
let num = 0;
let isTrue = false;
const map = textVal.value.split("\n").map((item: string) => {
num += item.length + 1;
if (num >= textarea.value!.selectionStart && !isTrue) {
item = " " + item;
isTrue = true;
num = textarea.value!.selectionStart;
}
return item;
})
textVal.value = map.join("\n");
textarea.value!.focus();
setTimeout(()=>{
textarea.value!.setSelectionRange(num+2,num+2);
},0)
}
几个注意点
- 首先要focus获取焦点
- 然后使用setSelectionRange设置光标位置,必须添加延时器保证textarea获取焦点,否则会移动失败,主要是这个问题卡了好久