自定义条件
此示例展示如何利用 searchBuilder.conditions
来添加自定义条件或覆盖已存在的条件。 searchBuilder.conditions
选项具有 7 个属性,每个属性对应 DataTables 能够检测到的一个类型。
字符串
日期
数字
数字格式
HTML
HTML 数字
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 的一个脚本示例。服务器端处理脚本可以使用任何语言写入,使用 数据表文档中描述的协议。