使用 DataTables 和 JavaScript 数组创建可搜索列的表格

使用 datatables 和 javascript 数组创建可搜索列的表格

本文档详细介绍了如何使用 DataTables 插件,结合 JavaScript 数组数据,创建具有列搜索功能的交互式表格。我们将从基础的 DataTables 初始化开始,逐步讲解如何配置列过滤器,并提供完整的代码示例,帮助开发者快速实现可搜索列的 DataTables 表格。

DataTables 列搜索实现教程

DataTables 是一款强大的 jQuery 插件,用于增强 HTML 表格的功能,例如排序、分页和过滤。本教程将指导你如何使用 DataTables 和 JavaScript 数组初始化表格,并为每一列添加搜索功能。

准备工作

首先,确保你已经包含了 DataTables 的必要文件。你需要引入 jQuery 和 DataTables 的 CSS 和 JavaScript 文件。你可以从 DataTables 官网下载这些文件,或者使用 CDN 链接。


初始化 DataTables

接下来,我们需要初始化 DataTables。假设我们有一个 JavaScript 数组 dataSet 包含表格数据,以及一个数组 headers 定义列标题。

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

const dataSet = [  ['a', 'b', 'x'],  ['c', 'd', 'y'],  ['e', 'f', 'z']];const headers = [{  'title': 'A'}, {  'title': 'B'}, {  'title': 'C'}];$(document).ready(function() {  $('#example').DataTable({    data: dataSet,    columns: headers,  });});

这段代码将 dataSet 中的数据和 headers 中的列标题传递给 DataTables,从而创建一个基本的表格。

添加列搜索功能

为了添加列搜索功能,我们需要在表格的每一列的头部添加输入框。当用户在输入框中输入内容时,DataTables 将根据输入的内容过滤该列的数据。

首先,我们需要克隆表头,并在克隆的表头中添加输入框。

$(document).ready(function() {  // Setup - add a text input to each footer cell  $('#example thead tr')    .clone(true)    .addClass('filters')    .appendTo('#example thead');  var table = $('#example').DataTable({    data: dataSet,    columns: headers,    orderCellsTop: true,    fixedHeader: true,    initComplete: function() {      var api = this.api();      // For each column      api        .columns()        .eq(0)        .each(function(colIdx) {          // Set the header cell to contain the input element          var cell = $('.filters th').eq(            $(api.column(colIdx).header()).index()          );          var title = $(cell).text();          $(cell).html('');          // On every keypress in this input          $(              'input',              $('.filters th').eq($(api.column(colIdx).header()).index())            )            .off('keyup change')            .on('change', function(e) {              // Get the search value              $(this).attr('title', $(this).val());              var regexr = '({search})'; //$(this).parents('th').find('select').val();              var cursorPosition = this.selectionStart;              // Search the column for that value              api                .column(colIdx)                .search(                  this.value != '' ?                  regexr.replace('{search}', '(((' + this.value + ')))') :                  '',                  this.value != '',                  this.value == ''                )                .draw();            })            .on('keyup', function(e) {              e.stopPropagation();              $(this).trigger('change');            });        });    },  });});

这段代码首先克隆了表头,并添加了 filters 类。然后,在 initComplete 回调函数中,我们遍历每一列,并在该列的头部单元格中添加一个输入框。当用户在输入框中输入内容时,我们使用 api.column(colIdx).search() 方法来过滤该列的数据。

完整的 HTML 结构

以下是完整的 HTML 结构:

    DataTables Column Search Demo          
$(document).ready(function() { const dataSet = [ ['a', 'b', 'x'], ['c', 'd', 'y'], ['e', 'f', 'z'] ]; const headers = [{ 'title': 'A' }, { 'title': 'B' }, { 'title': 'C' }]; // add a header row to your table var th = ''; headers.forEach(header => th = th + '' + header.title + ''); th = th + ''; $(th).appendTo('#example'); // Setup - add a text input to each footer cell $('#example thead tr') .clone(true) .addClass('filters') .appendTo('#example thead'); var table = $('#example').DataTable({ data: dataSet, columns: headers, orderCellsTop: true, fixedHeader: true, initComplete: function() { var api = this.api(); //console.log( api.columns().eq(0) ); // For each column api .columns() .eq(0) .each(function(colIdx) { //console.log( $(api.column(colIdx).header()).index() ); // Set the header cell to contain the input element var cell = $('.filters th').eq( $(api.column(colIdx).header()).index() ); //console.log( headers[colIdx].title ); var title = $(cell).text(); $(cell).html(''); // On every keypress in this input $( 'input', $('.filters th').eq($(api.column(colIdx).header()).index()) ) .off('keyup change') .on('change', function(e) { // Get the search value $(this).attr('title', $(this).val()); var regexr = '({search})'; //$(this).parents('th').find('select').val(); var cursorPosition = this.selectionStart; // Search the column for that value api .column(colIdx) .search( this.value != '' ? regexr.replace('{search}', '(((' + this.value + ')))') : '', this.value != '', this.value == '' ) .draw(); }) .on('keyup', function(e) { e.stopPropagation(); $(this).trigger('change'); //$(this) // .focus()[0] // .setSelectionRange(cursorPosition, cursorPosition); }); }); }, }); });

注意事项

确保 dataSet 和 headers 的数据结构匹配,即 dataSet 中的每一行数据的列数应该与 headers 中定义的列数相同。如果你的 HTML 表格没有定义

,你需要手动创建并添加到表格中。initComplete 回调函数是在 DataTables 初始化完成后执行的,你可以在这里添加自定义的逻辑。可以根据需要自定义搜索的逻辑,例如使用正则表达式进行搜索。

总结

通过本教程,你学习了如何使用 DataTables 和 JavaScript 数组初始化表格,并为每一列添加搜索功能。这种方法可以帮助你快速创建具有交互式过滤功能的表格,提升用户体验。希望本教程对你有所帮助!

以上就是使用 DataTables 和 JavaScript 数组创建可搜索列的表格的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 11:06:21
下一篇 2025年12月12日 21:25:01

相关推荐

  • DataTables教程:使用JavaScript数组数据实现高级列搜索功能

    本教程详细指导如何在DataTables中,利用JavaScript数组数据初始化表格,并为每一列添加交互式的搜索过滤功能。内容涵盖数据与列定义的匹配、动态生成表头 、以及通过initComplete回调实现列搜索框的完整逻辑,旨在帮助开发者构建功能强大的可搜索表格。 1. DataTables基础…

    好文分享 2025年12月20日
    000
  • 使用 TypeORM 的 Raw SQL 实现灵活的 Where 查询条件

    本文旨在介绍如何在 TypeORM 中使用 Raw SQL 表达式来构建更灵活的 Where 查询条件,尤其是在需要避免大量 Or 条件时。通过 Raw 函数,你可以直接在 TypeORM 的查询选项中嵌入原生 SQL 片段,从而实现更精细的查询控制,避免构建过于庞大的 Where 数组,提升代码可…

    2025年12月20日
    000
  • TypeORM find选项中Raw SQL条件的高效应用

    本文探讨了在TypeORM的find选项中,如何利用Raw操作符高效处理复杂的查询条件,特别是涉及OR逻辑和IS NULL判断的场景,避免了使用QueryBuilder或构造冗长的where数组,从而简化了代码并提高了可读性。 在typeorm中进行数据查询时,find或findandcount等方…

    2025年12月20日
    000
  • JavaScript对象数组按指定键分组与结构重塑教程

    本教程详细介绍了如何利用原生JavaScript的Array.prototype.reduce()和Object.values()方法,高效地将一个扁平的对象数组按照某个指定键进行分组,并重构其内部结构,将相同键值的相关数据聚合到一个新的嵌套数组中,从而实现数据结构的灵活转换,满足特定业务需求。 在…

    2025年12月20日
    000
  • 根据相同值重组对象数组:JavaScript 实现指南

    本文旨在提供一种高效且易于理解的方法,用于将对象数组按照特定属性值进行分组,并将其重组为新的数组结构。通过使用 Array.prototype.reduce() 和 Object.values() 等 JavaScript 内置方法,我们可以轻松地实现这一目标,从而简化数据处理流程,提高代码的可读性…

    2025年12月20日
    000
  • 按照相同值重组对象:JavaScript 教程

    本文将介绍如何使用 JavaScript 将具有相同属性值的对象进行分组,并将结果转换为一个新的对象数组。我们将利用 Array.prototype.reduce() 和 Object.values() 方法,以简洁高效的方式实现对象重组,最终生成一个包含分组后数据的结构化数组。 使用 JavaSc…

    2025年12月20日
    000
  • 根据相同值重组对象:JavaScript 实现指南

    本文介绍了如何使用 JavaScript 将对象数组按照指定的键值进行分组,生成一个新的数组,其中每个元素包含一个键值和所有具有该键值的对象组成的数组。我们将使用 Array.prototype.reduce() 和 Object.values() 方法来实现此功能,并提供详细的代码示例和解释。 分…

    2025年12月20日
    000
  • js 怎么实现本地存储

    选择 localstorage 还是 sessionstorage 取决于数据生命周期需求,localstorage 用于长期保存如用户偏好设置,sessionstorage 用于会话期间临时存储如购物车信息;2. 本地存储限制包括:每域名约 5mb 容量、仅支持字符串类型需用 json.strin…

    2025年12月20日
    000
  • 如何编写第一个JS程序

    答案是编写第一个JavaScript程序最直接的方式是通过HTML文件中的标签嵌入代码,并用console.log()在控制台输出结果。具体步骤包括创建包含基本HTML结构的index.html文件,在中插入script标签并写下console.log(“Hello, JavaScrip…

    2025年12月20日
    000
  • TestCafe userVariables 配置与访问:避免常见拼写错误

    本文详细介绍了如何在TestCafe中使用userVariables配置自定义变量,并深入探讨了在测试脚本中访问这些变量时可能遇到的常见问题。通过具体案例,我们揭示了导致变量访问失败的根本原因——通常是由于属性名称拼写错误,而非异步加载问题。教程将指导您正确配置和安全访问userVariables,…

    2025年12月20日
    000
  • React/JavaScript中高效合并对象数组内嵌套数组的教程

    本教程详细讲解了如何在React/JavaScript应用中,将包含嵌套数组的对象数组扁平化为一个单一的数组。我们将分析传统方法可能遇到的问题,并重点介绍如何利用Array.prototype.reduce方法,以声明式和高效的方式实现这一数据转换,从而避免状态覆盖,确保数据完整性。 1. 引言:理…

    2025年12月20日
    000
  • React/JavaScript中合并对象数组内部嵌套数组的教程

    本文将详细介绍如何在React/JavaScript中高效地合并一个对象数组内部嵌套的子数组。当遇到包含多个对象,且每个对象又含有一个子数组的数据结构时,我们通常需要将所有这些子数组中的元素提取并合并成一个扁平化的单一数组。教程将通过分析常见的错误方法,并重点讲解如何利用Array.prototyp…

    2025年12月20日
    000
  • JavaScript/React中高效合并对象数组内嵌套数组的教程

    本教程探讨了在React应用中如何高效地合并对象数组内嵌套的子数组。我们将深入分析一种常见的错误,并提供基于JavaScript reduce 方法的专业解决方案,以及更现代的 flatMap 替代方案,旨在帮助开发者以清晰、可维护的方式处理复杂数据结构,确保数据扁平化以满足UI渲染需求。 理解问题…

    2025年12月20日
    000
  • JavaScript/React中合并对象数组内嵌数组的实用教程

    本教程将指导您如何在JavaScript和React应用中高效合并对象数组中嵌套的子数组。通过深入解析Array.prototype.reduce()方法,结合扩展运算符,我们将演示如何将多层嵌套的数据结构扁平化为一个单一的数组,避免常见的状态更新错误,并提供清晰的示例代码和最佳实践。 理解问题:嵌…

    2025年12月20日 好文分享
    000
  • JS如何实现模块模式?模块化的封装

    javascript实现模块化的核心是通过创建私有作用域来避免全局污染并提供清晰的公共接口,主要采用两种方式:一是利用函数作用域特性的立即执行函数(iife)模式,包括经典iife和揭示模块模式,适用于不支持es6模块的旧环境,具有良好的兼容性但语法冗余且缺乏静态分析支持;二是现代javascrip…

    2025年12月20日
    000
  • js 如何计算日期差值

    在 javascript 中计算日期差值的核心是利用 gettime() 获取毫秒时间戳并相减,1. 使用 gettime() 计算毫秒差可精确处理闰年和时区问题;2. 若需日历天数差,应先将日期归零至当天0点再计算;3. 通过定义常量(如 one_day = 24 60 60 * 1000)可灵活…

    2025年12月20日
    000
  • 什么是AC自动机?多模式字符串匹配

    AC自动机通过Trie树与Fail指针实现多模式串高效匹配,构建时先插入所有模式串形成Trie树,再用BFS建立Fail指针以实现失配跳转,匹配时对文本串一次扫描即可找出所有匹配模式,相比KMP在多模式场景下更高效。 AC自动机,简单来说,就是一个能同时匹配多个模式串的字符串匹配算法。它是在Trie…

    2025年12月20日
    000
  • JS如何实现动画?动画的帧控制

    JavaScript实现动画的核心是通过requestAnimationFrame与浏览器刷新同步,持续更新元素的transform或opacity等高性能CSS属性,避免回流和重绘,结合缓动函数提升视觉流畅度,同时可借助GSAP等动画库简化复杂动画的开发,实现高效、流畅的动画效果。 JavaScr…

    好文分享 2025年12月20日
    000
  • js 如何验证表单数据

    客户端表单验证的核心是通过javascript在提交前检查数据,提升用户体验并减轻服务器负担;2. 实现方式为监听表单提交事件,阻止默认行为,逐项验证输入字段并显示错误信息;3. 邮箱、密码、确认密码和同意条款等字段需分别进行非空、格式、长度、一致性及勾选状态校验;4. 使用isvalidemail…

    2025年12月20日
    000
  • JS如何实现主题切换?主题的变量

    答案:JavaScript通过操作CSS自定义属性和类名实现主题切换,并利用localStorage持久化用户偏好。首先在CSS中定义:root下的默认主题变量及.dark-theme等类中的覆盖变量,采用语义化命名如–color-primary提升可维护性;JavaScript在DOM…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信