自定义多个条件
此实例展示了如何利用 searchBuilder.conditions 添加自定义条件或覆盖已有的条件。 searchBuilder.conditions 选项保留了 7 个属性,每个属性都对应 DataTables 可以检测的一种类型。
字符串日期数字数字格式化HTMLHTML 数字HTML 数字格式化
此外,SearchBuilder 还保留了其自己的 moment 属性,当一列使用 Moment.js 时会使用此属性。SearchBuilder 会自动检测和处理任何 Moment 格式的数据(此处 有实例)。SearchBuilder 还与 Luxon 集成,与与 Moment 集成一样(此处 有实例)。
此实例中,searchBuilder.conditions.num 被用于任何数字类型的列,创建新的条件 Multiple Of,这会创建一个输入元素,该元素需要一个数字。然后,搜索结果应该返回该列对应的所有倍数。如要添加一个自定义条件,需将条件对象的 key 设置为尚未使用的 key。
请注意,此条件不会添加到薪资列,因为它是格式化为 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 |
| 塔季扬娜·菲茨帕特里克 | 区域总监 | 伦敦 | 19 | 2010-03-17 | $385,750 |
| 迈克尔·席尔瓦 | 营销设计师 | 伦敦 | 66 | 2012-11-27 | $198,500 |
| 保罗·伯德 | 首席财务官 (CFO) | 纽约 | 64 | 2010-06-09 | $725,000 |
| 格洛丽亚·利特尔 | 系统管理员 | 纽约 | 59 | 2009-04-10 | $237,500 |
| 布拉德利·格里尔 | 软件工程师 | 伦敦 | 41 | 2012-10-13 | $132,000 |
| 大卫·里奥斯 | 人事主管 | 爱丁堡 | 35 | 2012-09-26 | $217,500 |
| 珍妮特·考德威尔 | 开发主管 | 纽约 | 30 | 2011-09-03 | $345,000 |
| 尤里·贝里 | 首席营销官 (CMO) | 纽约 | 40 | 2009-06-25 | $675,000 |
| 凯撒·万斯 | 售前支持 | 纽约 | 21 | 2011-12-12 | $106,450 |
| 多丽丝·怀尔德 | 销售助理 | 悉尼 | 23 | 2010-09-20 | $85,600 |
| 安吉丽卡·拉莫斯 | 首席执行官 (CEO) | 伦敦 | 47 | 2009-10-09 | $1,200,000 |
| 加文·乔伊斯 | 开发人员 | 爱丁堡 | 42 | 2010-12-22 | $92,575 |
| 詹妮弗·张 | 区域总监 | 新加坡 | 28 | 2010-11-14 | $357,650 |
| 布伦登·瓦格纳 | 软件工程师 | 旧金山 | 28 | 2011-06-07 | $206,850 |
| 菲奥娜·格林 | 首席运营官 (COO) | 旧金山 | 48 | 2010-03-11 | $850,000 |
| 伊藤寿 | 区域营销 | 东京 | 20 | 2011-08-14 | $163,000 |
| 米歇尔·豪斯 | 集成专家 | 悉尼 | 37 | 2011-06-02 | $95,400 |
| 苏基·伯克斯 | 开发人员 | 伦敦 | 53 | 2009-10-22 | $114,500 |
| 普雷斯科特·巴特利特 | 技术作者 | 伦敦 | 27 | 2011-05-07 | $145,000 |
| 加文·科尔特斯 | 团队领导 | 旧金山 | 22 | 2008-10-26 | $235,500 |
| 马特娜·麦克拉 | 售后支持 | 爱丁堡 | 46 | 2011-03-09 | $324,050 |
| 尤尼蒂·巴特勒 | 营销设计师 | 旧金山 | 47 | 2009-12-09 | $85,675 |
| 霍华德·哈特菲尔德 | 办公室经理 | 旧金山 | 51 | 2008-12-16 | $164,500 |
| 霍普·富恩特斯 | 秘书 | 旧金山 | 41 | 2010-02-12 | $109,850 |
| 维维安·哈雷尔 | 财务控制器 | 旧金山 | 62 | 2009-02-14 | $452,500 |
| 蒂莫西·穆尼 | 办公室经理 | 伦敦 | 37 | 2008-12-11 | $136,200 |
| 杰克逊·布拉德肖 | 总监 | 纽约 | 65 | 2008-09-26 | $645,750 |
| 奥利维亚·梁 | 支持工程师 | 新加坡 | 64 | 2011-02-03 | $234,500 |
| 布鲁诺·纳什 | 软件工程师 | 伦敦 | 38 | 2011-05-03 | $163,500 |
| 山本樱花 | 支持工程师 | 东京 | 37 | 2009-08-19 | $139,575 |
| 索尔·沃尔顿 | 开发人员 | 纽约 | 61 | 2013-08-11 | $98,540 |
| 芬恩·卡马乔 | 支持工程师 | 旧金山 | 47 | 2009-07-07 | $87,500 |
| 谢尔盖·鲍德温 | 数据协调员 | 新加坡 | 64 | 2012-04-09 | $138,575 |
| 塞奈达·弗兰克 | 软件工程师 | 纽约 | 63 | 2010-01-04 | $125,250 |
| 索里塔·塞拉诺 | 软件工程师 | 旧金山 | 56 | 2012-06-01 | $115,000 |
| 詹妮弗·阿科斯塔 | Junior Javascript 开发人员 | 爱丁堡 | 43 | 2013-02-01 | $75,650 |
| 卡拉·史蒂文斯 | 销售助理 | 纽约 | 46 | 2011-12-06 | $145,600 |
| 赫敏·巴特勒 | 区域总监 | 伦敦 | 47 | 2011-03-21 | $356,250 |
| 莱尔·格里尔 | 系统管理员 | 伦敦 | 21 | 2009-02-27 | $103,500 |
| 乔纳斯·亚历山大 | 开发人员 | 旧金山 | 30 | 2010-07-14 | $86,500 |
| 谢德·德克尔 | 区域总监 | 爱丁堡 | 51 | 2008-11-13 | $183,000 |
| 迈克尔·布鲁斯 | JavaScript 开发人员 | 新加坡 | 29 | 2011-06-27 | $183,000 |
| 唐娜·斯奈德 | 客户支持 | 纽约 | 27 | 2011-01-25 | $112,000 |
| 姓名 | 职位 | 办公室 | 年龄 | 开始日期 | 薪资 |
- Javascript
- HTML
- CSS
- Ajax
- 服务器端脚本
- 注释
下面显示的 Javascript 用于初始化本示例中显示的表格
$('#example').DataTable({ layout: { top1: { searchBuilder: { conditions: { num: { MultipleOf: { conditionName: 'Multiple Of', // 将在条件选择元素中显示的字符串值 init: function (that, fn, preDefined = null) { // 声明输入元素并设置监听器以触发搜索 var el = $('<input/>').on('input', function () { fn(that, this); }); // 添加机制以应用可能传入的预定义值 if (preDefined !== null) { $(el).val(preDefined[0]); } return el; }, inputValue: function (el) { // 返回输入元素内的值 return $(el[0]).val(); }, isInputValid: function (el, that) { // 如果输入元素中有文本,那么它有效 for searching return $(el[0]).val().length !== 0; }, search: function (value, comparison) { // 使用模数 (%) 运算符检查是否没有余数 return value % comparison === 0; } } } } } } } });
new DataTable('#example', { layout: { top1: { searchBuilder: { conditions: { num: { MultipleOf: { conditionName: 'Multiple Of', // String value that will be displayed in the condition select element init: function (that, fn, preDefined = null) { // Declare the input element and set the listener to trigger searching var el = document.createElement('input'); el.addEventListener('input', function () { fn(that, this); }); // Add mechanism to apply preDefined values that may be passed in if (preDefined !== null) { el.value = preDefined[0]; } return el; }, inputValue: function (el) { // Return the value within the input element return el[0].value; }, isInputValid: function (el, that) { // If there is text in the input element then it is valid for searching return el[0].value.length !== 0; }, search: function (value, comparison) { // Use the modulo (%) operator to check that there is no remainder return value % comparison === 0; } } } } } } } });
除了以上代码之外,加载以下 Javascript 库文件用于此示例
下面显示的 HTML 是原始 HTML 表格元素,未经 DataTables 增强
此示例使用额外一点 CSS,超出了从库文件(下面)中加载的 CSS,为了正确显示表格。使用的额外 CSS 如下所示
加载以下 CSS 库文件用于此示例,提供表格样式
此表格通过 Ajax 加载数据。加载的最新数据如下所示。随着任何其他数据的加载,此数据将自动更新。
下面显示执行此表格的服务器端处理所用的脚本。请注意,这只是一个使用 PHP 的示例脚本。服务器端处理脚本可以用任何语言编写,使用DataTables 文档中描述的协议。