在 React 项目中遇到一个需求,点击 tags
后插入进正在编辑的 textarea
中。
在翻阅了一些网上的答案后发现基本上都在围绕 setSelectionRange
展开,然而我并不想选中啊,好吧,没有耐心再去找了。自己再去尝试下,每次把光标移出文本框后通过控制台 focus
会发现光标依旧定位在移出时的位置,再联系上面的 api
,让我意识到 input
是存在一个记录光标位置的类似属性的。在控制台直接打印出 input
,寻寻觅觅发现了神奇的东西 selectionStart
和 selectionEnd
。修改相应的值,发现两值不一样时会选中区间内的文本,再次 focus
也就是定位到了可以修改这个选中值的地方了,完美~
因此通过修改当前文本框的 selectionStart
和 selectionEnd
即可自定义 focus
的光标位置了。下面是示例代码:
1 | <textarea id="textarea" rows="5" cols="50"></textarea> |
1 | var textarea = document.getElementById('textarea') |
最后,我们的项目使用了 antd,对文本框使用 setFieldsValue 赋值,这时候需要注意异步的问题,可以使用 setTimeout(func, 0)
来解决。