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

实现关键词高亮搜索框:仅显示含关键词的div元素

实现搜索关键词匹配div的显示/隐藏

嘿,你已经搞定了高亮功能,剩下的显示/隐藏逻辑其实很容易实现~我们可以在高亮操作之后,遍历所有.cd-item元素,判断每个元素是否包含搜索关键词,然后控制它们的显示状态。

下面是修改后的完整代码,我会一步步解释关键部分:

$(function() {
  $("input").on("input.highlight", function() {
    // 获取搜索关键词,同时去除首尾空格
    var searchTerm = $(this).val().trim();
    
    // 先清除所有标记,再重新标记关键词
    $(".cd-item").unmark().mark(searchTerm);
    
    // 处理每个cd-item的显示/隐藏
    $(".cd-item").each(function() {
      var $item = $(this);
      if (searchTerm === "") {
        // 如果关键词为空,显示所有元素
        $item.show();
      } else {
        // 判断当前item是否包含被标记的内容(即匹配关键词)
        var hasMatch = $item.find("mark").length > 0;
        // 用toggle切换显示状态:有匹配就显示,否则隐藏
        $item.toggle(hasMatch);
      }
    });
  }).trigger("input.highlight"); // 初始化触发一次,确保初始状态正确
});

关键逻辑说明:

  • 处理空关键词:当用户清空搜索框时,要确保所有.cd-item都重新显示,避免停留在隐藏状态。
  • 判断匹配状态:利用mark.js生成的<mark>标签来判断当前div是否包含匹配的关键词,这种方式比直接检查文本更准确(因为mark.js会处理精准匹配的情况)。
  • 切换显示状态:使用jQuery的.toggle()方法,传入一个布尔值,自动控制元素的显示或隐藏,比单独写show()/hide()更简洁。

如果你想实现不区分大小写的搜索,可以在调用mark()方法时加上配置项,同时调整判断逻辑:

// 标记时开启不区分大小写
$(".cd-item").unmark().mark(searchTerm, {
  ignoreCase: true
});

// 判断时也忽略大小写(可选,因为mark已经处理了)
var hasMatch = $item.find("mark").length > 0;

这样就能完美实现“仅显示包含关键词的div,其余隐藏”的需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:18:47