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

求可实现Bootstrap 4卡片筛选并添加隐藏类的轻量脚本方案

我之前也遇到过一模一样的问题——表格用的筛选脚本套Bootstrap卡片完全失效,Shuffle又太笨重,后来自己撸了个超轻量的方案,完美适配Bootstrap 4卡片结构,分享给你:

轻量Bootstrap 4卡片筛选解决方案

第一步:HTML结构(贴合Bootstrap样式)

先搭好筛选控件和卡片容器,给卡片加个data-category属性标记分类,方便筛选:

<!-- 筛选按钮组 -->
<div class="btn-group mb-3" role="group">
  <button type="button" class="btn btn-primary filter-btn active" data-filter="all">全部</button>
  <button type="button" class="btn btn-secondary filter-btn" data-filter="web">Web开发</button>
  <button type="button" class="btn btn-secondary filter-btn" data-filter="mobile">移动开发</button>
  <button type="button" class="btn btn-secondary filter-btn" data-filter="design">设计</button>
</div>

<!-- 卡片容器 -->
<div class="row row-cols-1 row-cols-md-3 g-4" id="card-container">
  <div class="col">
    <div class="card h-100" data-category="web">
      <div class="card-body">
        <h5 class="card-title">React入门指南</h5>
        <p class="card-text">这是一篇Web开发类的卡片内容...</p>
      </div>
    </div>
  </div>
  <div class="col">
    <div class="card h-100" data-category="mobile">
      <div class="card-body">
        <h5 class="card-title">Flutter实战</h5>
        <p class="card-text">这是一篇移动开发类的卡片内容...</p>
      </div>
    </div>
  </div>
  <div class="col">
    <div class="card h-100" data-category="design">
      <div class="card-body">
        <h5 class="card-title">Figma设计技巧</h5>
        <p class="card-text">这是一篇设计类的卡片内容...</p>
      </div>
    </div>
  </div>
  <!-- 更多卡片... -->
</div>

第二步:核心筛选脚本(轻量jQuery版)

这个脚本只有几十行,完全基于jQuery(和你之前尝试的方案依赖一致,无缝衔接),利用Bootstrap自带的**d-none**类来隐藏/显示卡片:

$(document).ready(function() {
  // 监听筛选按钮点击
  $('.filter-btn').click(function() {
    // 切换按钮激活状态
    $('.filter-btn').removeClass('active');
    $(this).addClass('active');
    
    // 获取当前筛选类别
    var filterValue = $(this).data('filter');
    
    // 遍历所有卡片容器
    $('#card-container .card').each(function() {
      // 匹配则显示,否则隐藏(注意操作父级.col,避免破坏网格布局)
      if (filterValue === 'all' || $(this).data('category') === filterValue) {
        $(this).closest('.col').removeClass('d-none');
      } else {
        $(this).closest('.col').addClass('d-none');
      }
    });
  });
});

为什么之前的表格方案无效?

表格筛选通常直接操作<tr>元素,但Bootstrap卡片嵌套在.col网格容器里,直接隐藏卡片本身会破坏布局——我们需要操作卡片的父元素.col,给它加/移除**d-none**类,这才是之前方案失效的核心原因。

可选:原生JS版本(不依赖jQuery)

如果不想用jQuery,也可以改成纯原生JS,同样轻量:

document.addEventListener('DOMContentLoaded', function() {
  const filterBtns = document.querySelectorAll('.filter-btn');
  const cardCols = document.querySelectorAll('#card-container .col');
  
  filterBtns.forEach(btn => {
    btn.addEventListener('click', function() {
      // 切换按钮激活状态
      filterBtns.forEach(b => b.classList.remove('active'));
      this.classList.add('active');
      
      const filterValue = this.dataset.filter;
      
      cardCols.forEach(col => {
        const card = col.querySelector('.card');
        if (filterValue === 'all' || card.dataset.category === filterValue) {
          col.classList.remove('d-none');
        } else {
          col.classList.add('d-none');
        }
      });
    });
  });
});

这个方案完全不需要额外依赖,代码简洁,还能完美适配Bootstrap的网格和卡片样式,比Shuffle轻量太多,你可以直接根据自己的分类需求修改data-category的值就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:18