自定义多个条件
此实例展示了如何利用 searchBuilder.conditions
添加自定义条件或覆盖已有的条件。 searchBuilder.conditions
选项保留了 7 个属性,每个属性都对应 DataTables 可以检测的一种类型。
字符串
日期
数字
数字格式化
HTML
HTML 数字
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 文档中描述的协议。