我为我的应用程序创建了一个自定义@mention系统,我唯一的问题是生病开始输入@...
,然后我选择了我要提及的用户,然后发生的事情是所选用户的名字仅仅是将其添加到textarea
的末尾,这样就可以了。如果我只输入@
,但是如果我输入@ja
然后选择jason smith
,则现在会显示{{1} }如何删除@后面键入的所有文本,然后添加到我的字符串上。仅供参考,这是在@jaJason Smith
所以我当前的功能是这样的。
textarea
所以发生的事情是我只是通过添加用户名来更新textarea的值
编辑
已经引起我注意,这不是最好的方法,因为如果用户将光标移到中间并输入@,名称将被添加到字符串的末尾而不是@,所以我的问题是是如何在@后面替换字符串,但是可以在textarea中的任何地方做呢?
任何帮助将不胜感激!
答案 0 :(得分:1)
这是解决方案的简化版本。我没有您的安装程序可以对此进行测试,当然可以采用一种更清洁的方法来进行此操作,但这应该可以让您知道去哪里。
addMention(user: { value: string }): void {
const textArea = document.querySelector('textarea');
const selection = textArea.selectionStart;
let value = textarea.value;
const str = value.substring(0, textArea.selectionStart);
const index = str.lastIndexOf('@');
const mention = str.substring(index);
value = `${value.substring(0, index)}${user.value}${value.substring(index + mention.length)}`;
textarea.value = value;
}
答案 1 :(得分:1)
我跳过dom部分,str
指textarea
的值,placeholder
指当前的智能,username
指真实的用户名,{ {1}}是可以通过position
document.getElementById('textarea').selectionStart