gpt4 book ai didi

javascript - 带有下拉列表的搜索栏

转载 作者:行者123 更新时间:2023-12-05 05:37:45 25 4
gpt4 key购买 nike

我正在尝试制作一个搜索栏。无论我在搜索框中键入什么,结果都会显示“下拉列表”,并且在我搜索时不会显示该列表中的元素。我究竟做错了什么? https://jsfiddle.net/5xh86fkn/

var dropdown = document.getElementsByClassName("dropdown-btn");
var i;

for (i = 0; i < dropdown.length; i++) {
dropdown[i].addEventListener("click", function() {
this.classList.toggle("active");
var dropdownContent = this.nextElementSibling;
if (dropdownContent.style.display === "block") {
dropdownContent.style.display = "none";
} else {
dropdownContent.style.display = "block";
}
});
}

function myFunction() {
var input, filter, ul, li, a, i;
input = document.getElementById("mySearch");
filter = input.value.toUpperCase();
ul = document.getElementById("myMenu");
li = ul.getElementsByTagName("li");
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[0];
if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "";
} else {
li[i].style.display = "none";
}
}
}
<div class="sidenav">
<input type="text" id="mySearch" onkeyup="myFunction()" placeholder="Search.." title="Type in a category">
<ul id="myMenu">
<li><a href="#about">About</a></li>
<li><a href="#services">Services</a></li>
<li><a href="#clients">Clients</a></li>
<li><a href="#contact">Contact</a></li>
<button class="dropdown-btn">Dropdown
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-container">
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
</div>
<li><a href="#contact">Search</a></li>
</ul>
</div>

最佳答案

这是您尝试通过在输入文本上键入建议来实时过滤菜单项的工作演示。

主要问题是使用正确的策略从 dom 中获取菜单项。您想要参与过滤的元素不是 <LI>元素。

此外,您嵌入下拉按钮中的列表未包含在 ol 容器中,并且破坏了正确的行为。

我稍微重构了你的 html,并专注于负责根据输入的输入过滤列表的单个 js 函数:

function f(filter){
menuItems = document.querySelectorAll('#myMenu > li');
for(const menuItem of menuItems){
const textContent = menuItem.textContent.trim().toUpperCase();
//console.log(`"${textContent}" "${filter}" "${textContent.indexOf(filter)}"`);
if (textContent.indexOf(filter.toUpperCase()) > -1) {
menuItem.classList.remove('hidden');
}else{
menuItem.classList.add('hidden');
}
}
}
.hidden{
display: none;
}
body {
font-family: "Lato", sans-serif;
}

/* Fixed sidenav, full height */
.sidenav {
height: 100%;
width: 200px;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
padding-top: 20px;
}

/* Style the sidenav links and the dropdown button */
.sidenav a, .dropdown-btn {
padding: 6px 8px 6px 16px;
text-decoration: none;
font-size: 20px;
color: #818181;
display: block;
border: none;
background: none;
width: 100%;
text-align: left;
cursor: pointer;
outline: none;
}

/* On mouse-over */
.sidenav a:hover, .dropdown-btn:hover {
color: #f1f1f1;
}

/* Main content */
.main {
margin-left: 200px; /* Same as the width of the sidenav */
font-size: 20px; /* Increased text to enable scrolling */
padding: 0px 10px;
}

/* Add an active class to the active dropdown button */
.active {
background-color: green;
color: white;
}

/* Dropdown container (hidden by default). Optional: add a lighter background color and some left padding to change the design of the dropdown content */
.dropdown-container {
display: none;
background-color: #262626;
padding-left: 8px;
}

/* Optional: Style the caret down icon */
.fa-caret-down {
float: right;
padding-right: 8px;
}

/* Some media queries for responsiveness */
@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
<div class="sidenav">

<input type="text" id="mySearch" onkeyup="f(this.value)" placeholder="Search.." title="Type in a category">

<ul id="myMenu">
<li><a href="#about">About</a></li>
<li><a href="#services">Services</a></li>
<li><a href="#clients">Clients</a></li>
<li><a href="#contact">Contact</a></li>
<li>
<button class="dropdown-btn">
Dropdown
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-container">
<ol>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
</ol>
</div>
</li>
<li>
<a href="#contact">Search</a>
</li>
</ul>

</div>

关于javascript - 带有下拉列表的搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73066547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com