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

如何在fetch请求中过滤指定响应数据并实现HTML复选框筛选功能

实现方案

一、固定过滤指定编码

你可以通过数组的filter方法对接口返回的contracts列表做过滤,只保留你需要的编码项即可,优化后的代码如下:

// 定义需要保留的合同编码白名单
const allowedContractCodes = ['Code 1', 'Code 3']

fetch('API LINK')
    .then(response => response.json())
    // 先过滤再传入渲染函数
    .then(data => makeContract(data.contracts.filter(item => allowedContractCodes.includes(item.contractCode))))
    .catch(error => console.log(`Oh no! ${error}`))

const makeContract = (contracts) => {
    const selectEl = document.getElementById('contractCode');
    // 渲染前清空原有内容,避免重复渲染出现重复选项
    selectEl.innerHTML = ''
    contracts.forEach(contract => {
        // 无需JSON.stringify+slice操作,直接取字段值即可
        const htmlTemplate = `<option>${contract.contractCode}</option>`;
        selectEl.innerHTML += htmlTemplate;
    });
};

本次修改点:

  • 新增白名单过滤逻辑,仅输出指定编码的选项
  • 修复原代码冗余的字符串处理逻辑,避免特殊字符场景下的格式错误
  • 修正forEach参数与数组重名的歧义问题
  • 新增渲染前清空逻辑,避免重复调用时选项叠加

二、通过复选框动态选择要展示的编码

可以实现,你需要先在HTML中添加复选框组,再监听复选框的选中状态动态过滤渲染下拉列表即可,代码示例如下:

HTML部分

<!-- 合同编码筛选复选框组 -->
<div class="contract-filter">
  <label><input type="checkbox" value="Code 1" class="contract-checkbox"> Code 1</label>
  <label><input type="checkbox" value="Code 2" class="contract-checkbox"> Code 2</label>
  <label><input type="checkbox" value="Code 3" class="contract-checkbox"> Code 3</label>
  <!-- 更多编码可按相同格式补充 -->
</div>
<!-- 原有下拉选择框 -->
<select id="contractCode"></select>

JS部分

// 存储接口返回的全量合同数据
let allContracts = []

// 监听复选框变化事件,动态更新下拉选项
document.querySelectorAll('.contract-checkbox').forEach(checkbox => {
  checkbox.addEventListener('change', updateContractSelect)
})

fetch('API LINK')
    .then(response => response.json())
    .then(data => {
      // 缓存全量数据供后续筛选使用
      allContracts = data.contracts
      // 首次渲染下拉选项
      updateContractSelect()
    })
    .catch(error => console.log(`Oh no! ${error}`))

// 下拉选项更新方法
function updateContractSelect() {
  // 拿到当前选中的编码列表
  const selectedCodes = Array.from(document.querySelectorAll('.contract-checkbox:checked'))
    .map(item => item.value)
  // 过滤得到要渲染的合同列表
  const filteredList = allContracts.filter(contract => selectedCodes.includes(contract.contractCode))
  // 渲染下拉选项
  const selectEl = document.getElementById('contractCode');
  selectEl.innerHTML = ''
  filteredList.forEach(contract => {
    const htmlTemplate = `<option>${contract.contractCode}</option>`;
    selectEl.innerHTML += htmlTemplate;
  })
}

如果合同编码数量较多,你也可以在拿到全量接口数据后,通过JS遍历自动生成所有对应的复选框元素,无需手动编写HTML。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:15:04