You need to enable JavaScript to run this app. 如何将解析后的JSON匹配数据改为卡片式展示并支持操作筛选
优惠活动
大模型
产品
解决方案
定价
更多

如何将解析后的JSON匹配数据改为卡片式展示并支持操作筛选

实现方案

1. 调整HTML结构

先在原有页面基础上新增卡片容器、切换按钮、操作按钮相关DOM结构,示例如下:

<!-- 匹配计数 -->
<div id="matchesCount">You have 0 matches.</div>
<!-- 浏览切换控件 -->
<div class="nav-btns">
  <button id="prevBtn">上一个</button>
  <span id="currentIndex">0/0</span>
  <button id="nextBtn">下一个</button>
</div>
<!-- 卡片容器 -->
<div id="matchesCardContainer"></div>

2. 新增基础样式(可根据设计需求调整)

.card {
  border: 1px solid #eee;
  border-radius: 8px;
  padding: 16px;
  margin: 12px 0;
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  display: none; /* 切换浏览模式下默认隐藏,仅显示当前选中卡片 */
}
.card.active {
  display: block;
}
.card .action-btns {
  margin-top: 12px;
  display: flex;
  gap: 8px;
}
.card.ok {
  border-color: #52c41a;
  background: #f6ffed;
}
.card.no {
  border-color: #ff4d4f;
  background: #fff2f0;
}
.nav-btns {
  margin: 12px 0;
  display: flex;
  gap: 8px;
  align-items: center;
}

如果需要所有卡片平铺展示,不需要切换浏览,删掉.card的display:none属性即可。

3. 修改JS逻辑

首先定义全局变量存储匹配结果和当前浏览索引:

// 全局变量,存储所有匹配结果和当前浏览位置
let allMatches = [];
let currentCardIndex = 0;

替换你原有筛选、渲染逻辑:

var dataParsed = JSON.parse(data);
// 注意:如果interests是输入框,建议把innerHTML改为value,输入框取值用value更准确
var interestsVar = document.getElementById("interests").value.trim();
var result = dataParsed.filter(x => x.interests === interestsVar);
var matchesCardContainer = document.getElementById("matchesCardContainer");

// 去重逻辑:判断当前结果是否已经存在于匹配列表中
const hasDuplicate = allMatches.some(item => JSON.stringify(item) === JSON.stringify(result[0]));
if (result.length > 0 && !hasDuplicate) {
  // 把新匹配项加入全局数组
  allMatches = [...allMatches, ...result];
  // 重新渲染所有卡片
  renderCards();
  // 更新匹配计数
  document.getElementById("matchesCount").innerHTML = `You have ${allMatches.length} matches.`;
  // 自动切换到最新匹配的卡片
  currentCardIndex = allMatches.length - 1;
  switchCard();
  count();
}

// 渲染所有卡片方法
function renderCards() {
  matchesCardContainer.innerHTML = '';
  allMatches.forEach((item, index) => {
    const card = document.createElement('div');
    card.className = `card ${index === currentCardIndex ? 'active' : ''}`;
    card.dataset.index = index;
    // 可根据你的JSON字段自定义展示内容,不需要全量序列化
    card.innerHTML = `
      <h4>匹配项 ${index + 1}</h4>
      <pre>${JSON.stringify(item, null, 2)}</pre>
      <div class="action-btns">
        <button class="ok-btn">OK</button>
        <button class="no-btn">NO</button>
      </div>
    `;
    matchesCardContainer.appendChild(card);
  });
  // 绑定OK/NO按钮事件
  bindActionEvents();
  // 更新索引展示
  updateIndexText();
}

// 绑定卡片操作按钮事件
function bindActionEvents() {
  document.querySelectorAll('.ok-btn').forEach(btn => {
    btn.addEventListener('click', (e) => {
      const card = e.target.closest('.card');
      // 添加OK状态标记
      card.classList.remove('no');
      card.classList.add('ok');
      // 可在此扩展额外逻辑:比如把标记结果存储到本地/上传到服务器
    });
  });
  document.querySelectorAll('.no-btn').forEach(btn => {
    btn.addEventListener('click', (e) => {
      const card = e.target.closest('.card');
      // 添加NO状态标记
      card.classList.remove('ok');
      card.classList.add('no');
      // 可在此扩展额外逻辑
    });
  });
}

// 切换卡片方法
function switchCard() {
  document.querySelectorAll('.card').forEach((card, index) => {
    card.classList.toggle('active', index === currentCardIndex);
  });
  updateIndexText();
}

// 更新当前索引显示文本
function updateIndexText() {
  document.getElementById('currentIndex').innerText = `${currentCardIndex + 1}/${allMatches.length}`;
}

// 绑定上下切换按钮事件
document.getElementById('prevBtn').addEventListener('click', () => {
  if (allMatches.length === 0) return;
  currentCardIndex = currentCardIndex > 0 ? currentCardIndex - 1 : allMatches.length - 1;
  switchCard();
});
document.getElementById('nextBtn').addEventListener('click', () => {
  if (allMatches.length === 0) return;
  currentCardIndex = currentCardIndex < allMatches.length - 1 ? currentCardIndex + 1 : 0;
  switchCard();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 23:36:11