Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为网站设计搜索框?_Javascript_Html_Css_Searchbar - Fatal编程技术网

Javascript 如何为网站设计搜索框?

Javascript 如何为网站设计搜索框?,javascript,html,css,searchbar,Javascript,Html,Css,Searchbar,我得到了一个网站自定义李过滤器,但我需要隐藏在初始阶段的所有李。我需要隐藏页面中的所有li,只显示搜索li。但问题是,当我试图隐藏li时,它也会在结果期间阻止所有li 函数myFunction(){ var输入、滤波器、ul、li、a、i、TXT值; 输入=document.getElementById(“myInput”); filter=input.value.toUpperCase(); ul=document.getElementById(“myUL”); li=ul.getEleme

我得到了一个网站自定义李过滤器,但我需要隐藏在初始阶段的所有李。我需要隐藏页面中的所有li,只显示搜索li。但问题是,当我试图隐藏li时,它也会在结果期间阻止所有li

函数myFunction(){
var输入、滤波器、ul、li、a、i、TXT值;
输入=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=“无”;
}
}
}


如果输入为空字符串,则可以隐藏所有
li
元素,即
”,并在用户输入时和首次加载JS时运行该函数

函数myFunction(){
var输入、滤波器、ul、li、a、i、TXT值;
输入=document.getElementById(“myInput”);
filter=input.value.toUpperCase();
ul=document.getElementById(“myUL”);
li=ul.getElementsByTagName(“li”);
如果(input.value==“”){
[…li].forEach((liElement)=>{
liElement.style.display=“无”;
});
}否则{
对于(i=0;i-1){
李[i].style.display=“”;
}否则{
li[i].style.display=“无”;
}
}
}
}
myFunction()


我已经快速重构了您的代码,使其支持多个值,并保留带有链接的列表,以备您需要

这也只会创建与搜索词匹配的列表项

我不知道这对性能是否更好,但是向数组中添加元素比创建html元素来保存值更容易

函数myFunction(){
设ul=document.querySelector(“#myUL”)
ul.innerHTML='';
让inputVal=document.querySelector(“#myInput”).value;
如果(inputVal.length==0){
返回;
}
让可能值=['tree'、'bike'、'sea'、'mobile'];
让resSpan=document.querySelector('#res');
设resVal=[];
可能值。forEach(str=>{
if(str.includes(inputVal)){
resVal.push(str)
}
})
如果(resVal.length>0){
resVal.forEach(v=>{
让newLi=document.createElement('li');
设newAnc=document.createElement('a');
newAnc.innerText=v;
newLi.appendChild(newAnc);
ul.appendChild(newLi);
})
} 
}


    好的,下面是代码的工作版本。我知道这个问题已经得到了回答,但是这个版本支持多个
    li
    s作为搜索结果出现:

    (进行了2次更改-从
    li
    s开始隐藏,然后在搜索栏为空时重新隐藏)

    函数myFunction(){
    var输入、滤波器、ul、li、a、i、TXT值;
    输入=document.getElementById(“myInput”);
    filter=input.value.toUpperCase();
    ul=document.getElementById(“myUL”);
    li=ul.getElementsByTagName(“li”);
    对于(i=0;i-1&&filter.length>0){
    李[i].style.display=“”;
    }否则{
    li[i].style.display=“无”;
    }
    }
    }
    
    
    const input=document.getElementById(“myInput”);
    const ul=document.getElementById(“myUL”);
    const li=ul.getElementsByTagName(“li”);
    对于(i of li)i.style.display=“无”;
    函数myFunction(){
    let filter,a,i,txtValue;
    filter=input.value.toUpperCase();
    如果(过滤器){
    对于(i=0;i-1){
    li[i].style.display=“block”;
    }否则{
    li[i].style.display=“无”;
    }
    }
    }else for(i of li)i.style.display=“无”;
    }
    
    

    这不是OP想要的。如果搜索
    e
    ,然后删除搜索值,则不会清除结果。
    e
    仅搜索单个
    mobile
    其他结果如何…@decpk我已修复了使用class属性而不是使用其名称进行相同搜索筛选的任何方法。是的,为什么不。但是要弄清楚课堂上的情况<代码>类
    应用于赋予多个元素,如果您想过滤它们,那么是的,您可以这样做。首先,选择所有元素,然后使用
    element.classList
    property筛选具有该类的元素。请您用工作代码向我解释一下好吗?当然可以,如果您可以在SOF中问这个问题,而不是在注释中问,那不是更好吗。