Javascript 获取indexOf()只搜索名称而不是整个元素

Javascript 获取indexOf()只搜索名称而不是整个元素,javascript,Javascript,在过去的两天里,我尝试了很多不同的东西,但我无法让它按我所希望的方式工作 函数myFunction(){ var输入、滤波器、ul、li、a、i; 输入=document.getElementById(“myInput”); filter=input.value.toUpperCase(); ul=document.getElementById(“myUL”); li=ul.getElementsByTagName(“li”); 对于(i=0;i-1){ 李[i].style.display=

在过去的两天里,我尝试了很多不同的东西,但我无法让它按我所希望的方式工作

函数myFunction(){
var输入、滤波器、ul、li、a、i;
输入=document.getElementById(“myInput”);
filter=input.value.toUpperCase();
ul=document.getElementById(“myUL”);
li=ul.getElementsByTagName(“li”);
对于(i=0;i-1){
李[i].style.display=“”;
}否则{
li[i].style.display=“无”;
}
}
}
出于某种原因,它在JSFIDLE中根本不起作用,但在我的内部代码中,它起作用并搜索整个元素

我希望它只搜索id=name元素,而不是整个元素,否则当有人键入“Ext”时,它会显示所有人

谢谢


我认为这样做应该会奏效:

函数myFunction(){
无功输入,滤波器,ul,li,n,i;
输入=document.getElementById(“myInput”);
filter=input.value.toUpperCase();
ul=document.getElementById(“myUL”);
li=ul.getElementsByTagName(“li”);
对于(i=0;i-1){
李[i].style.display=“”;
}否则{
li[i].style.display=“无”;
}
}
}
document.querySelector(“#myInput”).addEventListener('keyup',myFunction)
#我的输入{
背景图像:url('/images/searchicon.png');
背景位置:10px 12px;
背景重复:无重复;
宽度:50%;
字体大小:16px;
填充:12px 20px 12px 40px;
边框:1px实心#ddd;
边缘底部:12px;
}
#密尔{
列表样式类型:无;
填充:0;
保证金:0;
}
#李美儿{
边框:1px实心#ddd;
页边顶部:-1px;
/*防止双重边界*/
背景色:#f6f6f6;
填充:12px;
文字装饰:无;
字号:18px;
颜色:黑色;
显示:块
}
#李美儿{
背景色:#E2;
游标:默认值;
}
#myUL li a:悬停:非(.header){
背景色:#eee;
}


您可以对搜索内容进行更多选择。您正在搜索整个A元素,而您应该在中选择第一个

querySelector将返回第一个匹配元素:

  for (i = 0; i < li.length; i++) {
    a = li[i].querySelector("a p");
    if (a && a.innerHTML.toUpperCase().indexOf(filter) > -1) {
      li[i].style.display = "";
    } else {
      li[i].style.display = "none";
    }
  }
for(i=0;i-1){
李[i].style.display=“”;
}否则{
li[i].style.display=“无”;
}
}
看。。。

当您在文档的标题部分定义您的功能时,它在您的小提琴中起作用。只需点击JavaScript框架上的设置图标。这就是brill,它做了我需要的事情,但它不再隐藏标签,而我的原始代码做了,怎么样?稍微复杂一点,但恐怕是必要的。那样做了,但没有退回标签。这是99%。。但是,当您删除文本时,标签仍然会消失。。
  for (i = 0; i < li.length; i++) {
    a = li[i].querySelector("a p");
    if (a && a.innerHTML.toUpperCase().indexOf(filter) > -1) {
      li[i].style.display = "";
    } else {
      li[i].style.display = "none";
    }
  }