搜索 API(正则表达式)
搜索表是最常见的 DataTables 表用户交互之一,并且 DataTables 提供了许多方法供你控制此交互。全局搜索 (search()
) 和每列 (column().search()
) 都有 API。
还请注意,你必须在执行搜索之后调用 draw()
方法,才能显示结果。
每次搜索(全局或列)都可以标记为正则表达式(允许你创建非常复杂的交互),而且可以智能搜索也可以不智能搜索。当针对某个特定搜索启用智能搜索时,DataTables 会将用户输入字符串修改为复杂的正则表达式,这样可以使搜索更直观。
此示例允许你“玩耍”DataTables 提供的各种搜索选项。
目标 | 搜索文本 | 视为正则表达式 | 使用智能搜索 |
---|---|---|---|
全局搜索 | |||
列 - 姓名 | |||
列 - 职位 | |||
列 - 办公室 | |||
列 - 年龄 | |||
列 - 入职日期 | |||
列 - 薪水 |
姓名 | 职位 | 办公室 | 年龄 | 入职日期 | 薪水 |
---|---|---|---|---|---|
Tiger Nixon | 系统架构师 | 爱丁堡 | 61 | 2011-04-25 | $320,800 |
Garrett Winters | 会计 | 东京 | 63 | 2011-07-25 | $170,750 |
Ashton Cox | 初级技术作者 | 旧金山 | 66 | 2009-01-12 | $86,000 |
Cedric Kelly | 高级 JavaScript 开发者 | 爱丁堡 | 22 | 2012-03-29 | $433,060 |
Airi Satou | 会计 | 东京 | 33 | 2008-11-28 | $162,700 |
Brielle Williamson | 集成专家 | 纽约 | 61 | 2012-12-02 | $372,000 |
Herrod Chandler | 销售助理 | 旧金山 | 59 | 2012-08-06 | $137,500 |
Rhona Davidson | 集成专家 | 东京 | 55 | 2010-10-14 | $327,900 |
Colleen Hurst | JavaScript 开发者 | 旧金山 | 39 | 2009-09-15 | $205,500 |
Sonya Frost | 软件工程师 | 爱丁堡 | 23 | 2008-12-13 | $103,600 |
Jena Gaines | 办公室经理 | 伦敦 | 30 | 2008-12-19 | $90,560 |
Quinn Flynn | 支持主管 | 爱丁堡 | 22 | 2013-03-03 | $342,000 |
Charde Marshall | 区域总监 | 旧金山 | 36 | 2008-10-16 | $470,600 |
Haley Kennedy | 高级营销设计师 | 伦敦 | 43 | 2012-12-18 | $313,500 |
Tatyana Fitzpatrick | 区域总监 | 伦敦 | 19 | 2010-03-17 | $385,750 |
Michael Silva | 营销设计师 | 伦敦 | 66 | 2012-11-27 | $198,500 |
Paul Byrd | 首席财务官 (CFO) | 纽约 | 64 | 2010-06-09 | $725,000 |
Gloria Little | 系统管理员 | 纽约 | 59 | 2009-04-10 | $237,500 |
Bradley Greer | 软件工程师 | 伦敦 | 41 | 2012-10-13 | $132,000 |
Dai Rios | 人员主管 | 爱丁堡 | 35 | 2012-09-26 | $217,500 |
Jenette Caldwell | 开发主管 | 纽约 | 30 | 2011-09-03 | $345,000 |
Yuri Berry | 首席营销官 (CMO) | 纽约 | 40 | 2009-06-25 | $675,000 |
Caesar Vance | 售前支持 | 纽约 | 21 | 2011-12-12 | $106,450 |
Doris Wilder | 销售助理 | 悉尼 | 23 | 2010-09-20 | $85,600 |
Angelica Ramos | 首席执行官 (CEO) | 伦敦 | 47 | 2009-10-09 | $1,200,000 |
Gavin Joyce | 开发者 | 爱丁堡 | 42 | 2010-12-22 | $92,575 |
Jennifer Chang | 区域总监 | 新加坡 | 28 | 2010-11-14 | $357,650 |
Brenden Wagner | 软件工程师 | 旧金山 | 28 | 2011-06-07 | $206,850 |
Fiona Green | 首席运营官 (COO) | 旧金山 | 48 | 2010-03-11 | $850,000 |
Shou Itou | 区域营销 | 东京 | 20 | 2011-08-14 | $163,000 |
Michelle House | 集成专家 | 悉尼 | 37 | 2011-06-02 | $95,400 |
Suki Burks | 开发者 | 伦敦 | 53 | 2009-10-22 | $114,500 |
Prescott Bartlett | 技术作者 | 伦敦 | 27 | 2011-05-07 | $145,000 |
Gavin Cortez | 团队负责人 | 旧金山 | 22 | 2008-10-26 | $235,500 |
Martena Mccray | 售后支持 | 爱丁堡 | 46 | 2011-03-09 | $324,050 |
Unity Butler | 营销设计师 | 旧金山 | 47 | 2009-12-09 | $85,675 |
Howard Hatfield | 办公室经理 | 旧金山 | 51 | 2008-12-16 | $164,500 |
Hope Fuentes | 秘书 | 旧金山 | 41 | 2010-02-12 | $109,850 |
Vivian Harrell | 财务控制 | 旧金山 | 62 | 2009-02-14 | $452,500 |
Timothy Mooney | 办公室经理 | 伦敦 | 37 | 2008-12-11 | $136,200 |
Jackson Bradshaw | 总监 | 纽约 | 65 | 2008-09-26 | $645,750 |
Olivia Liang | 支持工程师 | 新加坡 | 64 | 2011-02-03 | $234,500 |
Bruno Nash | 软件工程师 | 伦敦 | 38 | 2011-05-03 | $163,500 |
Sakura Yamamoto | 支持工程师 | 东京 | 37 | 2009-08-19 | $139,575 |
Thor Walton | 开发者 | 纽约 | 61 | 2013-08-11 | $98,540 |
Finn Camacho | 支持工程师 | 旧金山 | 47 | 2009-07-07 | $87,500 |
Serge Baldwin | 数据协调员 | 新加坡 | 64 | 2012-04-09 | $138,575 |
Zenaida Frank | 软件工程师 | 纽约 | 63 | 2010-01-04 | $125,250 |
Zorita Serrano | 软件工程师 | 旧金山 | 56 | 2012-06-01 | $115,000 |
Jennifer Acosta | 初级 JavaScript 开发人员 | 爱丁堡 | 43 | 2013-02-01 | $75,650 |
Cara Stevens | 销售助理 | 纽约 | 46 | 2011-12-06 | $145,600 |
Hermione Butler | 区域总监 | 伦敦 | 47 | 2011-03-21 | $356,250 |
Lael Greer | 系统管理员 | 伦敦 | 21 | 2009-02-27 | $103,500 |
Jonas Alexander | 开发者 | 旧金山 | 30 | 2010-07-14 | $86,500 |
Shad Decker | 区域总监 | 爱丁堡 | 51 | 2008-11-13 | $183,000 |
Michael Bruce | JavaScript 开发者 | 新加坡 | 29 | 2011-06-27 | $183,000 |
Donna Snider | 客户支持 | 纽约 | 27 | 2011-01-25 | $112,000 |
姓名 | 职位 | 办公室 | 年龄 | 入职日期 | 薪水 |
- JavaScript
- HTML
- CSS
- Ajax
- 服务器端脚本
- 注释
以下是用于初始化此示例中所示表格的 JavaScript
function filterGlobal(table) { table .search( $('#global_filter').val(), $('#global_regex').prop('checked'), $('#global_smart').prop('checked') ) .draw(); } function filterColumn(table, i) { table .column(i) .search( $('#col' + i + '_filter').val(), $('#col' + i + '_regex').prop('checked'), $('#col' + i + '_smart').prop('checked') ) .draw(); } var table = $('#example').DataTable(); $('input.global_filter').on('keyup click', function () { filterGlobal(table); }); $('input.column_filter').on('keyup click', function () { filterColumn(table, $(this).parents('tr').attr('data-column')); });
function filterGlobal(table) { let filter = document.querySelector('#global_filter'); let regex = document.querySelector('#global_regex'); let smart = document.querySelector('#global_smart'); table.search(filter.value, regex.checked, smart.checked).draw(); } function filterColumn(table, i) { let filter = document.querySelector('#col' + i + '_filter'); let regex = document.querySelector('#col' + i + '_regex'); let smart = document.querySelector('#col' + i + '_smart'); table.column(i).search(filter.value, regex.checked, smart.checked).draw(); } let table = new DataTable('#example'); document.querySelectorAll('input.global_filter').forEach((el) => { el.addEventListener(el.type === 'text' ? 'keyup' : 'change', () => filterGlobal(table) ); }); document.querySelectorAll('input.column_filter').forEach((el) => { let tr = el.closest('tr'); let columnIndex = tr.getAttribute('data-column'); el.addEventListener(el.type === 'text' ? 'keyup' : 'change', () => filterColumn(table, columnIndex) ); });
除了以上代码以外,此示例中还加载了以下 JavaScript 库文件,以备使用
以下是 DataTables 增强之前显示的原始 HTML 表格元素
为了正确显示表,此示例使用了库文件中加载代码之外的少量额外 CSS,如下所示
为了对表进行样式设计,此示例中加载了以下 CSS 库文件,以备使用
此表通过 Ajax 加载数据。已加载的最新数据如下所示。只要加载任何其他数据,此数据就会自动更新。
以下显示了用于对该表执行服务器端处理的脚本。请注意,这仅仅是一个使用 PHP 的示例脚本。可以使用任何语言编写服务器端处理脚本,方法是使用DataTables 文档中描述的协议。