Javascript 不仅在开始时自动完成文本的中间部分

Javascript 不仅在开始时自动完成文本的中间部分,javascript,Javascript,有没有一种方法可以在文本的中间实现自定义的自动完成列表,而不仅仅是从头开始 比如说,我有一个这样的自定义自动完成列表 ['@Martin','@Josu','@Mikenko','@Buarandun','@Ravindran','Basix','#ItemNr'] 当我在输入中键入以下内容时,'Hallo@M',它应该列出['@Martin','@Mikenko'] 谢谢。这部分 inp.addEventListener(“输入”,函数(e){ var a,b,i,val=该值; 皈依

有没有一种方法可以在文本的中间实现自定义的自动完成列表,而不仅仅是从头开始

比如说,我有一个这样的自定义自动完成列表

['@Martin','@Josu','@Mikenko','@Buarandun','@Ravindran','Basix','#ItemNr']
当我在输入中键入以下内容时,
'Hallo@M'
,它应该列出
['@Martin','@Mikenko']

谢谢。

这部分

inp.addEventListener(“输入”,函数(e){
var a,b,i,val=该值;
皈依

inp.addEventListener(“输入”,函数(e){
var a,b,i,val=该值;
val=val.split(“”).reverse()[0];//获取最后一个

这应该总是得到最后一个字。您可以根据要开始自动完成的字符长度应用条件

if(yourInput.length > 3 ) {
  //your rest autocomplete thing here
}
您可以使用
search()
方法。请阅读相关内容

跟随变化

if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) {


未测试,希望这有帮助:)

您只需要更改即可

var a, b, i, val = this.value.split("@");
/*close any already open lists of autocompleted values*/
closeAllLists();
if (!val || val.length < 2) { return false;}
val = val[val.length-1]

和显示列表的更改

b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
b.innerHTML += arr[i].substr(val.length);
b.innerHTML=“”+arr[i].substr(0,val.length)+“”;
b、 innerHTML+=arr[i].substr(val.length);

b.innerHTML=arr[i].toLowerCase().replace(val.toLowerCase(),“”+val.toLowerCase()+“”);
b、 style.textTransform=“大写”;
当您在文本中键入“@”时,它将开始显示自动完成

示例

const searchInput=document.getElementById(“搜索”);
const output=document.getElementById(“输出”);
常量名称=[
“@Martin”,
“@Josu”,
“@Mikenko”,
“@Buarandun”,
“@Ravindran”,
“巴西克斯”,
“#项目编号”
];
searchInput.addEventListener(“输入”,匹配名称);
函数匹配名(e){
const{value}=e.target;
output.innerHTML=“”
//如果找到“@”符号,则开始匹配
if(包括(“@”)的值){
const symbolIndex=value.indexOf(“@”);//获取符号索引
const matchValue=value.substring(symbolIndex);//从符号索引开始匹配
const matchList=names.filter(
name=>name.toLowerCase().indexOf(matchValue.toLowerCase())!=-1
);
//输出
const html=matchList.map(name=>{
常量名称=名称
.toLowerCase()
.replace(matchValue,`${matchValue}`)
返回`${Name}`
}).join(“”)
//将数据推入输出
output.innerHTML=html
}
}
.name{
显示:块
}


检查此项:它不是文本的中间部分,只是在开始时。对不起,我的错误。请检查我的答案。对不起,我的问题不够详细。当我说:“你好,科罗姆”它应该列出哥伦比亚。现在它不匹配。在这种情况下,你需要提到你的文本的哪个部分需要开始自动完成。否则每次当你开始写作时,它都会显示自动完成列表。我刚刚更改了。请看一看。对做了另一个简单的更改。现在你只需写“@”,它就会开始显示au像任何其他即时通讯(skype、messenger等)一样,在您想要的地方完成
if(arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase())
if(arr[i].toLowerCase().indexOf(val.toLowerCase()) !== -1)
b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
b.innerHTML += arr[i].substr(val.length);
b.innerHTML = arr[i].toLowerCase().replace(val.toLowerCase(), '<b>' + val.toLowerCase() + '</b>');
b.style.textTransform = "capitalize";