JavaScript实现API数据搜索与动态表格展示

JavaScript实现API数据搜索与动态表格展示

本教程旨在指导如何使用javascript从api获取数据,并在网页表格中动态展示。核心内容包括数据全局存储、利用`array.prototype.filter()`方法实现高效的数据搜索功能,并根据用户输入实时更新表格内容,同时强调代码结构优化和大小写不敏感的搜索实现。

在现代前端应用中,从API获取数据并以交互式表格的形式呈现是常见的需求。当数据量较大时,用户需要一个搜索功能来快速定位所需信息。本文将详细介绍如何利用JavaScript实现这一功能,包括数据获取、全局存储、动态表格渲染以及基于用户输入的实时搜索过滤。

1. 核心技术概述

实现这一功能主要依赖以下JavaScript核心技术:

Fetch API: 用于异步获取远程API数据。DOM 操作: 用于动态创建、修改和更新网页元素,特别是表格行。Array.prototype.filter(): 数组的高阶函数,用于根据指定条件筛选数组元素,是实现搜索功能的核心。事件监听器: 用于捕获用户在搜索框输入或点击搜索按钮时的行为。

2. HTML结构:搜索界面与数据表格

首先,我们需要构建基础的HTML骨架,包括一个输入框用于用户输入搜索关键词,一个搜索按钮来触发搜索,以及一个表格来展示数据。

            可搜索的API数据表格            /* 简单的样式,可根据需要自行美化 */        body { font-family: Arial, sans-serif; margin: 20px; }        input[type="text"], input[type="submit"] { padding: 8px; margin-bottom: 10px; }        table { width: 100%; border-collapse: collapse; margin-top: 20px; }        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }        th { background-color: #f2f2f2; }                        
国家 新增确诊 累计确诊 新增死亡 累计死亡 新增恢复 累计恢复 最后更新日期

注意: 确保输入框 (myInput)、搜索按钮 (mySubmit) 和表格主体 (tbody) 都具有唯一的 id 属性,以便JavaScript能够准确地获取并操作它们。

立即学习“Java免费学习笔记(深入)”;

3. JavaScript实现:数据获取与全局存储

为了实现搜索功能,我们需要在首次从API获取数据后,将其存储在一个全局可访问的变量中。这样,每次用户进行搜索时,我们就不需要重新请求API,而是直接对已有的数据进行过滤。

// script.jslet countriesData = []; // 全局变量,用于存储从API获取的所有国家数据/** * 从API获取数据并初始化全局变量 */const getdata = async () => {    const endpoint = "https://api.covid19api.com/summary";    try {        const response = await fetch(endpoint);        if (!response.ok) {            throw new Error(`HTTP error! status: ${response.status}`);        }        const data = await response.json();        // 将获取到的国家数据存储到全局变量        countriesData = data.Countries;        // 数据加载完成后,立即显示所有国家数据        _DisplayCountries();    } catch (error) {        console.error("获取数据失败:", error);        // 可以在这里添加错误提示给用户    }};// 在页面加载完成后调用数据获取函数getdata();

在上述代码中:

countriesData 被声明为一个全局数组,用于保存所有国家的数据对象。getdata 是一个异步函数,负责使用 fetch API从指定端点获取数据。数据成功获取后,data.Countries 会被赋值给 countriesData。_DisplayCountries() 函数在数据加载完成后立即调用,以显示所有国家的数据。

4. 数据展示与搜索逻辑

接下来,我们创建一个函数来负责数据的过滤和表格的渲染。这个函数将接受一个可选的搜索关键词作为参数。

// script.js (接上一段代码)/** * 根据搜索关键词过滤并显示国家数据 * @param {string} searchTerm - 用户输入的搜索关键词,默认为空字符串表示显示所有数据 */const _DisplayCountries = (searchTerm = "") => {    const tbody = document.querySelector("#tbody");    tbody.innerHTML = ``; // 清空现有表格内容    // 使用filter方法根据搜索关键词筛选数据    const filteredCountries = countriesData.filter(country =>        country.Country.toLowerCase().includes(searchTerm.toLowerCase())    );    // 遍历筛选后的数据,并将其添加到表格中    filteredCountries.forEach(result => {        tbody.innerHTML += `            ${result.Country}            ${result.NewConfirmed}            ${result.TotalConfirmed}            ${result.NewDeaths}            ${result.TotalDeaths}            ${result.NewRecovered}            ${result.TotalRecovered}            ${result.Date}        `;    });    // 如果没有搜索结果,可以显示提示信息    if (filteredCountries.length === 0 && searchTerm !== "") {        tbody.innerHTML = `没有找到匹配 "${searchTerm}" 的国家。`;    }};

_DisplayCountries 函数的实现细节:

它接收一个 searchTerm 参数,默认为空字符串。当 searchTerm 为空时,将显示所有数据。tbody.innerHTML = “ 清空了表格现有的所有行,确保每次渲染都是全新的结果。countriesData.filter(…) 是核心搜索逻辑。它会遍历 countriesData 数组中的每个国家对象:country.Country.toLowerCase() 将国家名称转换为小写。searchTerm.toLowerCase() 将搜索关键词也转换为小写。includes() 方法检查国家名称是否包含搜索关键词,从而实现大小写不敏感的模糊匹配。forEach 循环用于遍历过滤后的 filteredCountries 数组,并为每个国家动态创建一行表格数据。添加了当没有搜索结果时的用户提示。

5. 事件监听与搜索触发

最后一步是为搜索按钮添加事件监听器,当用户点击按钮时,获取输入框中的值并调用 _DisplayCountries 函数来更新表格。

// script.js (接上一段代码)// 为搜索按钮添加点击事件监听器document.querySelector("#mySubmit").addEventListener("click", () => {    const searchInput = document.querySelector("#myInput").value;    _DisplayCountries(searchInput); // 将搜索框的值作为参数传递给显示函数});// 也可以为输入框添加 'keyup' 事件,实现实时搜索document.querySelector("#myInput").addEventListener("keyup", (event) => {    // 只有在用户按下Enter键时才搜索,或者实时搜索    // if (event.key === "Enter") {        const searchInput = document.querySelector("#myInput").value;        _DisplayCountries(searchInput);    // }});

document.querySelector(“#mySubmit”).addEventListener(“click”, …) 监听搜索按钮的点击事件。当点击发生时,它获取 myInput 输入框的当前值,并将其作为参数传递给 _DisplayCountries 函数。为了提供更好的用户体验,您还可以为输入框添加 keyup 事件监听器,实现用户输入时即时搜索的效果。

6. 完整代码示例

将上述HTML和JavaScript代码整合后,您将得到一个功能完整的可搜索数据表格。

HTML (index.html):

            可搜索的API数据表格            body { font-family: Arial, sans-serif; margin: 20px; }        input[type="text"], input[type="submit"] { padding: 8px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 4px; }        input[type="submit"] { background-color: #007bff; color: white; cursor: pointer; }        input[type="submit"]:hover { background-color: #0056b3; }        table { width: 100%; border-collapse: collapse; margin-top: 20px; }        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }        th { background-color: #f2f2f2; }        tr:nth-child(even) { background-color: #f9f9f9; }                
国家 新增确诊 累计确诊 新增死亡 累计死亡 新增恢复 累计恢复 最后更新日期

JavaScript (script.js):

let countriesData = [];const getdata = async () => {    const endpoint = "https://api.covid19api.com/summary";    try {        const response = await fetch(endpoint);        if (!response.ok) {            throw new Error(`HTTP error! status: ${response.status}`);        }        const data = await response.json();        countriesData = data.Countries;        _DisplayCountries(); // 初始显示所有数据    } catch (error) {        console.error("获取数据失败:", error);        const tbody = document.querySelector("#tbody");        tbody.innerHTML = `数据加载失败,请稍后再试。`;    }};const _DisplayCountries = (searchTerm = "") => {    const tbody = document.querySelector("#tbody");    tbody.innerHTML = ``; // 清空现有表格内容    const filteredCountries = countriesData.filter(country =>        country.Country.toLowerCase().includes(searchTerm.toLowerCase())    );    if (filteredCountries.length === 0 && searchTerm !== "") {        tbody.innerHTML = `没有找到匹配 "${searchTerm}" 的国家。`;        return;    }    filteredCountries.forEach(result => {        tbody.innerHTML += `            ${result.Country}            ${result.NewConfirmed}            ${result.TotalConfirmed}            ${result.NewDeaths}            ${result.TotalDeaths}            ${result.NewRecovered}            ${result.TotalRecovered}            ${result.Date}        `;    });};// 页面加载时获取数据getdata();// 搜索按钮点击事件document.querySelector("#mySubmit").addEventListener("click", () => {    const searchInput = document.querySelector("#myInput").value;    _DisplayCountries(searchInput);});// 输入框实时搜索事件 (可选)document.querySelector("#myInput").addEventListener("keyup", () => {    const searchInput = document.querySelector("#myInput").value;    _DisplayCountries(searchInput);});

7. 进阶优化与注意事项

大小写不敏感搜索的替代方案:正则表达式除了使用 toLowerCase() 和 includes(),您还可以使用正则表达式来实现更灵活的搜索模式,例如:

// 在 _DisplayCountries 函数内部const regex = new RegExp(searchTerm, "i"); // "i" 标志表示不区分大小写const filteredCountries = countriesData.filter(country =>    country.Country.match(regex));

这种方法在需要更复杂的模式匹配时(例如匹配开头、结尾、或使用特定字符集)会更加强大。

性能优化对于非常庞大的数据集(例如数万甚至数十万条记录),每次 innerHTML 的重新赋值可能会导致性能问题。此时可以考虑:

文档片段 (DocumentFragment): 批量构建DOM元素,然后一次性添加到文档中,减少重绘和回流。虚拟滚动 (Virtual Scrolling): 只渲染视口内可见的表格行,对于超大数据集非常有效。节流 (Throttling) / 防抖 (Debouncing): 如果使用 keyup 实时搜索,可以添加节流或防抖功能,避免用户输入过快导致频繁触发搜索,从而优化性能和用户体验。

用户体验

加载状态提示: 在数据从API加载时,显示一个“加载中…”的提示,避免页面空白。无结果提示: 当搜索没有匹配项时,清晰地告知用户。清除搜索: 添加一个清除按钮或在搜索框为空时自动显示所有数据。

错误处理在 getdata 函数中,我们已经添加了基本的 try…catch 块来捕获API请求错误。在实际应用中,您可能需要更详细的错误信息展示给用户。

代码分离与模块化对于更复杂的应用,可以将数据获取、渲染逻辑和事件处理进一步封装到不同的模块或类中,提高代码的可维护性和复用性。

总结

通过本教程,我们学习了如何利用JavaScript的Fetch API获取远程数据,并将其存储在全局变量中。核心搜索功能通过 Array.prototype.filter() 结合 toLowerCase() 和 includes() 方法实现,确保了大小写不敏感的模糊匹配。同时,通过动态更新DOM,实现了用户输入后表格内容的实时刷新。遵循代码分离的原则,将数据获取和数据展示逻辑封装在不同的函数中,有助于提升代码的可读性和可维护性。这些技术是构建交互式前端数据展示应用的基础。

以上就是JavaScript实现API数据搜索与动态表格展示的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1593121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
html源码如何保存为云端代码文件_html源码保存到云端的教程
上一篇 2025年12月23日 08:17:13
Web开发基础:HTML中正确链接CSS样式表指南
下一篇 2025年12月23日 08:17:25

相关推荐

  • 如何设置VSCode的默认编码?

    VSCode默认使用UTF-8编码,可通过设置files.encoding指定默认编码如utf8、gbk;2. 启用files.autoGuessEncoding可自动识别文件编码;3. 在settings.json中配置可持久化编码设置,支持手动修改并即时生效。 VSCode 默认使用 UTF-8…

    2026年9月20日
    000
  • 荣耀Magic8系列发布会六大产品价格汇总来了:349元起 最贵6699元!

    10月15日,荣耀召开新品发布会,正式推出荣耀Magic8系列、荣耀MagicPad 3 Pro等六大新品,涵盖手机、平板、耳机、智能手表及智能配件。 各产品价格信息汇总如下: 荣耀Magic8系列 荣耀Magic8 12GB+256GB:4499元 12GB+512GB:4799元 16GB+51…

    2026年9月20日
    000
  • 如何在Java中定义一个包含参数的方法

    定义Java带参方法需明确访问修饰符、返回类型、方法名及参数列表。例如:public static int add(int a, int b) { return a + b; },调用时传入对应类型参数,如add(5, 3)输出结果8,参数类型必须匹配,否则编译错误。 在Java中定义一个包含参数的…

    2026年9月20日
    100
  • 灵绘AI如何生成3D效果_灵绘AI3D效果生成的实用教程

    启用灵绘AI的3D视图增强模式,输入含景深等关键词的提示词,调整视角与深度参数并启用Z轴分层,生成后使用光影滤镜增强立体感,最后导出为WebP 3D或OBJ格式以保留深度信息。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 如果您希望使用灵…

    2026年9月20日
    000
  • mysql如何优化like模糊查询

    优先使用前缀匹配并建立索引,避免前置通配符导致全表扫描;对大字段采用全文索引或外部搜索引擎如Elasticsearch;合理设计覆盖索引,减少SELECT *,提升查询效率。 在MySQL中,LIKE模糊查询虽然常用,但容易导致性能问题,特别是在数据量大的情况下。优化的关键在于减少全表扫描、提升索引…

    2026年9月20日
    000
  • win10默认网关不可用怎么办_win10默认网关错误修复方法

    1、重启路由器和网卡适配器可刷新网络状态;2、重置TCP/IP协议栈以修复通信故障;3、更新或重装网卡驱动解决兼容性问题;4、关闭电源管理节能设置确保网卡持续工作;5、设置IPv4自动获取地址以正确获取网关信息。 如果您尝试访问互联网,但网络连接显示“默认网关不可用”,则可能是由于网络配置或设备通信…

    2026年9月20日
    000
  • 为什么VSCode的CSS代码提示不全?

    答案:VSCode CSS提示不全通常由配置或环境问题导致。1. 确保文件语言模式为CSS并正确关联扩展名;2. 更新VSCode以支持现代CSS特性,自定义属性需插件辅助;3. 安装IntelliSense、Tailwind或PostCSS等插件增强提示功能;4. 检查settings.json中…

    2026年9月20日
    000
  • 如何在Linux中自动重启 Linux systemd自动恢复

    答案:通过配置systemd服务文件中的Restart、RestartSec、WatchdogSec及StartLimitInterval等参数,可实现Linux服务的自动重启与看门狗监控,并避免无限重启循环,提升系统稳定性。 在Linux中,可以通过systemd来实现服务的自动重启,确保服务在崩…

    2026年9月20日
    000
  • JAXB中动态获取Java对象QName并创建JAXBElement的反射策略

    本文探讨了在jaxb中,当`jaxbintrospector.getelementname`无法获取java对象对应的`qname`时,如何通过反射机制调用`objectfactory`中生成的`create`方法来动态创建`jaxbelement`。该方法避免了大量类型判断,提高了代码的灵活性和可…

    2026年9月20日
    000
  • 电脑开机要按F1因BIOS设置错误通过恢复默认设置解决

    开机需按F1主因是BIOS检测到配置错误或硬件信息丢失,常见于CMOS电池没电、硬盘模式设置错误等;恢复默认设置可解决多数问题。 电脑开机提示按F1才能进入系统,多数情况是BIOS设置异常导致的。最常见的原因是CMOS电池没电、硬盘模式设置错误、软驱或启动设备配置问题等。这类问题通常可以通过恢复BI…

    2026年9月20日
    100
  • 428万行业最强跑分!荣耀高管:Magic8同是骁龙 大有不同

    10月16日消息,昨晚荣耀magic8系列正式亮相,全系搭载第五代骁龙8至尊版处理器,这款芯片目前处于行业性能巅峰地位。 该处理器采用台积电第三代3nm工艺打造,在相同性能下功耗降低10%。其CPU架构为2+6的八核设计,其中超大核主频高达4.6GHz,创下移动平台新纪录,大核频率则为3.62GHz…

    2026年9月20日
    100
  • Mockito中利用自定义ArgumentMatcher实现集合内参数匹配

    mockito并未提供直接的`in()`参数匹配器来判断方法参数是否包含在指定集合中。本文将详细介绍如何利用`intthat`(或`argthat`)结合lambda表达式或自定义匹配器,灵活实现对方法参数是否属于某个集合的条件匹配,从而在测试存根(stubbing)或验证(verification…

    2026年9月20日
    000
  • 怎么在VSCode里运行HTML文件?

    使用Live Server扩展是VSCode运行HTML文件最简单的方法,安装后右键选择“Open with Live Server”即可在浏览器中自动打开并实时预览网页内容。 在VSCode里运行HTML文件,最简单的方法是借助浏览器打开。VSCode本身不直接运行HTML,但可以快速预览和调试。…

    2026年9月20日
    000
  • Java中将包含嵌套列表的对象列表扁平化为单一元素列表的转换技巧

    本文探讨了在java中如何将一个包含嵌套列表的对象列表进行转换,使其生成一个新的列表,其中每个对象内部的嵌套列表只包含一个元素。文章详细介绍了三种实现方式:基于java 7及以前版本的传统循环方法、利用java 8至java 15的stream api结合`flatmap`操作,以及java 16及…

    2026年9月20日
    200
  • PHP框架依赖管理工具选哪个_PHP框架依赖管理工具对比

    Composer是PHP依赖管理的首选工具,通过composer.json定义依赖、自动安装包并处理版本冲突,支持主流框架、拥有丰富生态和自动加载机制,尽管存在学习曲线和潜在依赖冲突,但其优势远超其他方案。 PHP框架依赖管理,其实就是选一个靠谱的工具来帮你自动搞定项目里各种代码包的安装、更新和卸载…

    2026年9月20日
    000
  • 如何为VSCode配置C++开发环境?

    答案:配置VSCode的C++环境需安装MinGW-w64编译器并添加到PATH,安装C/C++和可选Code Runner扩展,创建.c_cpp_properties.json、tasks.json和launch.json文件以配置编译器路径、编译任务和调试设置,最后通过编译运行测试代码验证配置成…

    2026年9月20日
    100
  • MySQL索引是什么_如何通过索引提升查询性能?

    MySQL索引是什么_如何通过索引提升查询性能?MySQL索引是什么_如何通过索引提升查询性能?MySQL索引是什么_如何通过索引提升查询性能?MySQL索引是什么_如何通过索引提升查询性能?

    索引通过排序+查找结构提升查询速度,适合加索引的字段包括where条件、join连接、order by和group by中的字段,但唯一值少、数据量小或频繁更新的字段不适合。常见误区有索引失效、模糊查询左侧通配符、联合索引顺序错误、冗余索引等。可通过explain命令查看索引使用情况,定期清理无用索…

    2026年9月20日 用户投稿
    000
  • Mockito ArgumentMatcher:优雅实现参数集合包含性验证

    本文探讨了在mockito中,当需要验证方法参数是否包含在特定集合中时,如何克服标准`argumentmatchers`的限制。通过利用`argumentmatchers.intthat()`(或`argthat()`)结合lambda表达式,可以灵活地实现自定义的参数匹配逻辑。文章还介绍了如何将此…

    2026年9月20日
    000
  • 绝境北方兑换码有什么 绝境北方最新2025兑换码分享

    绝境北方最新通用兑换码有:north888、viking2025、ship666等等,可在游戏内商城直接兑换,获得黄金龙头船首像、1000铁与建造速度+15%等丰厚奖励,限时有效先到先得,也可在修改器中享受更多福利。 享受无限物品|游戏作弊器: 绝境北方最新2025兑换码如下: NORTH888:兑…

    2026年9月20日
    500
  • Java中通过PKCS12证书实现OkHttp客户端认证的POST请求

    本教程详细介绍了如何在java应用中,利用okhttp库执行需要客户端证书认证的post请求。我们将重点讲解如何加载pkcs12格式的证书文件,配置keystore和keymanagerfactory,初始化sslcontext,并将其集成到okhttpclient中,以确保请求的安全性和认证的正确…

    2026年9月20日
    000

发表回复

登录后才能评论
关注微信