我很难用这个。我正在使用Javascript。
我有一个textarea,它检测@
输入并将其存储在数组中。
var input = "@a @b @c" //textarea
var indexes = [1, 4, 7];
现在每个新的input
我想通过查看caretPos
indexes.forEach(function(value, i){
if (input.substr(value - 1, 1) !== '@') {
indexes.splice(i, 1);
}
if (caretPos == value || caretPos > value) {
activeIndex = value;
}
}
我知道我错过了一张支票,但我不知道如何实施。只要您使用caretPos
后退,此代码就会有效,但一旦您继续前进,它就会停止工作。
编辑:如果不清楚。如果caretPos
为5
,则activeIndex
为4
。
答案 0 :(得分:1)
看起来你正试图找到caretPos左边第一个@符号的索引
当前设置不起作用的原因是您在循环时更改索引数组。 index.splice()
更改索引。当你遍历一个数组时,这是危险/不好的做法。
并且您并不需要索引数组来实现您想要的目标。
如果你这样做:
activeIndex = input.slice(0,caretpos).lastIndexOf('@') +1;
你应该得到正确的结果。
slice()
从输入字符串中删除所有内容(不更改原始输入字符串)lastIndexOf()
找到@符号的最后一个符号(并添加1,因为这是您要查找的内容)。希望这有帮助!