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

JS实现列表搜索时textContent.indexOf无法匹配输入值如何解决

列表实时搜索失效修复

核心问题定位

你的代码逻辑存在1个关键错误,直接导致筛选完全不生效:

  • 变量search存储的是#search输入框的DOM对象本身,而非用户输入的关键词文本。调用字符串方法indexOf()时传入DOM对象,JS会自动把对象转成字符串[object HTMLInputElement],这个内容不可能出现在任何列表项文本里,所以所有匹配判断都会返回不通过。你打开控制台看之前写的console.log输出,全都是-1,就是这个原因导致的。

之前功能正常大概率是早期代码里你取了输入框的value属性,后续调整代码时不小心漏写了.value,和教程示例对照时没注意到这个细节。

修复后完整代码

JavaScript部分

function searchList() {
  // 取输入框元素后,通过.value获取用户输入的文本,顺手转小写做不区分大小写匹配,trim去掉首尾空格
  const keyword = document.querySelector('#search').value.trim().toLowerCase();
  const listItems = document.querySelectorAll('#phone li');
  for (const item of listItems) {
    const itemText = item.textContent.toLowerCase();
    // 判断列表项文本是否包含输入关键词
    item.style.display = itemText.includes(keyword) ? '' : 'none';
  }
}

HTML部分

只需要把输入框绑定的函数名改成和修复后的JS函数名一致即可,其余部分不需要改动:

<input type="text" id="search" onkeyup="searchList()" placeholder="输入关键词搜索">
<ul id="phone">
  <li>iPhone 12</li>
  <li>iPhone 12 Pro</li>
  <li>iPhone 12 Pro Max</li>
  <li>iPhone 12 Mini</li>
  <li>iPad Air</li>
  <li>iPad Pro</li>
  <li>iMac</li>
  <li>Mac book Air</li>
  <li>Mac book Pro</li>
  <li>Mac Pro</li>
  <li>Test</li>
</ul>

优化点说明

  • 做了大小写不敏感匹配,用户输入小写iphone/mac也能正常匹配对应项
  • 自动忽略输入内容首尾的多余空格,避免用户不小心打了空格导致匹配失败
  • 变量名语义化,避免函数名和DOM查询变量重名导致的潜在冲突
  • 用更语义化的includes()方法替代indexOf() > -1的判断写法,可读性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:18:22