You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的JavaScript输入过滤代码仅能筛选前10个选项?

问题原因及解决方案

核心问题:HTML标签语法错误

你的代码里存在未闭合标签和冗余空标签,导致DOM结构异常:

  • 第10个选项(saturday)的<li>未添加闭合标签</li>
  • 紧接着多了一个无内容的空<li>标签

浏览器解析HTML时会自动修复语法错误,但这种修复会让sunday、test2等后续<li>被嵌套到未闭合的saturday标签内部,不再是<ul>的直接子元素。你的JS代码通过ul.getElementsByTagName("li")获取的元素集合中,后续嵌套的<li>不会被正确遍历处理——它们的display属性始终保持默认的显示状态,自然不会被过滤规则影响。

修复步骤

修改HTML的<ul>部分,补全闭合标签并删除冗余空标签:

<ul id="myMenu">
  <li><a href="#">Option1</a></li>
  <li><a href="#">Test</a></li>
  <li><a href="#">Lorem ipsum</a></li>
  <li><a href="#">abcde</a></li>
  <li><a href="#">monday</a></li>
  <li><a href="#">tuesday</a></li>
  <li><a href="#">wednesday</a></li>
  <li><a href="#">thrusday</a></li>
  <li><a href="#">friday</a></li>
  <li><a href="#">saturday</a></li> <!-- 补全闭合标签 -->
  <li><a href="#">sunday</a></li>
  <li><a href="#">test2</a></li>
  <li><a href="#">iii</a></li>
  <li><a href="#">12345</a></li>
  <li><a href="#">qwerty</a></li>
</ul>

可选优化:让代码更健壮

可以改用querySelectorAll明确获取<ul>的直接子<li>,避免嵌套元素干扰,同时简化代码逻辑:

function myFunction() {
  const input = document.getElementById("mySearch");
  const filter = input.value.toUpperCase();
  const lis = document.querySelectorAll("#myMenu > li");
  
  for (const li of lis) {
    const aText = li.querySelector("a").textContent.toUpperCase();
    li.style.display = aText.includes(filter) ? "" : "none";
  }
}

内容的提问来源于stack exchange,提问作者user19964717

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:05:18