自定义条件
此示例展示如何利用 searchBuilder.conditions 来添加自定义条件或覆盖已存在的条件。 searchBuilder.conditions 选项具有 7 个属性,每个属性对应 DataTables 能够检测到的一个类型。
字符串日期数字数字格式HTMLHTML 数字HTML 数字格式
除以上条件外,SearchBuilder 还有自己的 moment 属性,当在列上使用 Moment.js 时使用该属性。SearchBuilder 将自动检测和处理任何 moment 格式的数据(此处 参见示例)。SearchBuilder 也能与 Luxon 集成,就像与 moment 的集成一样(此处 参见示例)
在此示例中, searchBuilder.conditions 用于为类型为 num 的任何列创建一个新条件 +- 5,这将创建一个输入元素以获取数字。然后,搜索结果应返回在该数字 5 年之内的任何年龄。若要添加自定义条件,可以将条件对象的键设置为尚未使用的键。
请注意,此条件不会添加到薪水列,因为该列是类型为 num-fmt 的格式化的数字。有关列类型的更多信息,请查看 columns.type 选项。
SearchBuilder.Condition 数据类型详细说明了要添加到 SearchBuilder 的自定义条件的要求。
有关如何设置自定义条件的详细演练,请参阅 此文档页面。
| 姓名 | 职位 | 办公室 | 年龄 | 开始日期 | 工资 |
|---|---|---|---|---|---|
| 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 | 首席财务官 | 纽约 | 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 | 首席市场官 | 纽约 | 40 | 2009-06-25 | $675,000 |
| Caesar Vance | 售前支持 | 纽约 | 21 | 2011-12-12 | $106,450 |
| Doris Wilder | 销售助理 | 悉尼 | 23 | 2010-09-20 | $85,600 |
| Angelica Ramos | 首席执行官 | 伦敦 | 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 | 首席运营官 | 旧金山 | 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 用于初始化此示例中显示的表
$('#example').DataTable({ layout: { top1: { searchBuilder: { conditions: { num: { // 覆盖 num 类型中的 equals 条件 '+-5': { // 此函数确定是否将条件包含在搜索中 isInputValid: function (el, that) { let allFilled = true; // 检查每个元素以确保输入有效 for (let element of el) { if ($(element).is('input') && $(element).val().length === 0) { allFilled = false; } } return allFilled; }, // 这是条件选择控件中显示的字符串 conditionName: '+- 5', // 此函数收集/设置由搜索中使用的 dom 元素的值 inputValue: function (el) { let values = []; // 遍历输入元素并将每个值推送到返回数组 for (let element of el) { if ($(element).is('input')) { values.push($(element).val()); } } return values; }, // 此函数初始化条件,特别是任何需要用到的 dom 元素 init: function (that, fn, preDefined = null) { // 声明输入元素 let el = $('<input/>') .addClass(that.classes.value) .addClass(that.classes.input) .on('input', function () { fn(that, this); }); // 如果存在预定义值,则将其添加 if (preDefined !== null) { $(el).val(preDefined[0]); } return el; }, // 直接的搜索函数,比较表中的值和输入元素中的比较值 // 这些值在 `inputValue` 中检索到 search: function (value, comparison) { return ( +value <= +comparison[0] + 5 && +value >= +comparison[0] - 5 ); } } } } } } } });
除了以上代码,此示例还加载了以下 Javascript 库文件以供使用
下面显示的 HTML 是原始 HTML 表元素,在 DataTables 增强它之前
此示例使用了除库文件(见下文)加载的一些其他 CSS,以正确显示表格。下面显示了使用的其他 CSS
此示例中加载了以下 CSS 库文件以提供表格样式
此表格通过 Ajax 加载数据。下面显示了已加载的最新数据。随着任何其他数据加载,此数据将自动更新。
用于执行此表的服务器端处理的脚本显示在下方。请注意,这只是使用 PHP 的一个脚本示例。服务器端处理脚本可以使用任何语言写入,使用 数据表文档中描述的协议。