自定义多个条件

此实例展示了如何利用 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 文档中描述的协议

      其他示例