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

多关键词HTML列表筛选功能优化求助(附JavaScript代码)

实现多关键词模糊搜索的修改方案

你的核心需求是把「完全匹配」改成「多关键词任意匹配」,用split(" ")拆分关键词是正确思路,下面直接给你修改后的代码,再拆解关键变化:

修改后的完整代码

window.addEventListener("load", () => {
  const filter = document.getElementById("filter");
  const listItems = document.querySelectorAll(".list li");

  filter.onkeyup = () => {
    const inputValue = filter.value.trim().toLowerCase();
    // 拆分关键词,过滤掉空字符串(处理多空格输入的情况)
    const keywords = inputValue.split(" ").filter(word => word.length > 0);

    for (const item of listItems) {
      const itemText = item.innerHTML.toLowerCase();
      let shouldShow = false;

      // 输入为空时保持默认隐藏
      if (keywords.length === 0) {
        item.classList.add("hide");
        continue;
      }

      // 检查是否有至少一个关键词匹配
      for (const keyword of keywords) {
        if (itemText.includes(keyword)) {
          shouldShow = true;
          break; // 找到一个匹配就停止检查,提升效率
        }
      }

      // 根据匹配结果切换显示状态
      shouldShow ? item.classList.remove("hide") : item.classList.add("hide");
    }
  };
});

关键修改点说明

  • 关键词拆分与过滤:用split(" ")把输入内容拆成单词数组,再通过filter去掉空字符串——避免用户输入多个空格时产生无效的空关键词。
  • 匹配逻辑重构:不再用整个搜索字符串做完全匹配,而是逐个检查每个关键词是否存在于列表项文本中,只要有一个匹配就标记为显示。
  • 空输入处理优化:把空输入的判断提前,逻辑更清晰,避免多余的循环操作。
  • 变量名优化:把list改成listItems、i改成item,让代码更易读(新手阶段养成清晰的命名习惯很重要)。

效果验证

输入VAUXHALL CORSA DIESEL或DIESEL VAUXHALL,都会匹配到BLUE VAUXHALL CORSA 1.6L DIESEL.;哪怕只输入单个关键词CORSA,也会显示对应的列表项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:00:57