插件示例

本示例演示如何对自定义列类型使用插件。DataTable.ext.searchBuilder.conditions 对象允许将自定义条件添加到条件查询生成器中。有关要添加的条件结构详细信息,请访问 searchBuilder.conditions

此处使用 columns.type 为 office 列指定了自定义列类型 office。我们还向条件查询生成器添加了适用于此 office 类型的某些条件,这些条件使用 select2。要从插件中使用自定义筛选器,请选择办公室 > 等于并选择任何办公室,您将看到最后一个 select 元素是 select2 元素。

有关如何创建自己的插件的更多信息,请参阅 此文档

姓名 职位 办公室 年龄 开始日期 薪水
泰格·尼克松 系统架构师 爱丁堡 61 2011-04-25 $320,800
加勒特·温特斯 会计 东京 63 2011-07-25 $170,750
艾什顿·考克斯 初级技术撰稿人 旧金山 66 2009-01-12 $86,000
塞德里克·凯利 高级 JavaScript 开发者 爱丁堡 22 2012-03-29 $433,060
艾莉·佐藤 会计 东京 33 2008-11-28 $162,700
布里埃尔·威廉姆森 集成专家 纽约 61 2012-12-02 $372,000
赫罗德·钱德勒 销售助理 旧金山 59 2012-08-06 $137,500
罗纳·戴维森 集成专家 东京 55 2010-10-14 $327,900
科琳·赫斯特 JavaScript 开发者 旧金山 39 2009-09-15 $205,500
索尼娅·弗罗斯特 软件工程师 爱丁堡 23 2008-12-13 $103,600
詹娜·盖恩斯 办公室经理 伦敦 30 2008-12-19 $90,560
奎因·弗林 支持负责人 爱丁堡 22 2013-03-03 $342,000
查德·马歇尔 地区总监 旧金山 36 2008-10-16 $470,600
海莉·肯尼迪 高级营销设计师 伦敦 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
Shou Itou 区域营销 东京 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
Unity Butler 营销设计师 旧金山 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
珍妮弗·阿科斯塔 初级 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 用于初始化此示例中显示的表格

// 向 office 列类型 DataTable.ext.searchBuilder.conditions.office 中添加自定义条件 =: { // 该函数决定是否在搜索中包含条件 isInputValid: function (el, that) { // 如果未选择任何选项,或已选择但无值,请勿包含该条件 if ( $(el[0]).has('option:selected').length < 1 || ($(el[0]).has('option:selected').length === 1 && $($(el[0]).children('option:selected')[0]).text().length === 0) ) { return false; } return true; }, // 这是条件选择中显示的字符串 conditionName: 'Equals', // 该函数从要用于搜索的 init 函数中创建的 dom 元素收集/设置值 inputValue: function (el) { let values = []; for (let element of el) { if ($(element).is('select')) { values.push( $(element) .children('option:selected') .val() ); } } // 返回选定值 return values; }, // 该函数初始化条件,特别是任何需要用于其的 dom 元素 init: function (that, fn, preDefined = null) { // 由于 select2 元素将使用表格中的值填充, // 我们需要行索引和列索引。 let column = $(that.dom.data) .children('option:selected') .val(); let indexArray = that.s.dt .rows() .indexes() .toArray(); let added = []; // 声明 select2 元素 let el = $( '<select class="js-example-placeholder-single js-states form-control" style="width: 300px"/>' ); $(el).prepend('<option></option>'); // 设置必要的侦听器来触发搜索 el.on('select2:select', function () { fn(that, el); }); // 对于每行 for (let index of indexArray) { // 提取相关数据 let cell = that.s.dt.cell(index, column); let value = { filter: cell.render( that.c.orthogonal.search ), index, text: cell.render('display') }; // 如果我们尚未添加此值 if (added.indexOf(value.filter) === -1) { // 创建要添加到 select 2 元素的选项 let opt = $('<option>', { text: value.text, value: value.filter }) .addClass(that.classes.option) .addClass(that.classes.notItalic); $(el).append(opt); // 记录过滤器值,以免重复添加 added.push(value.filter); // 检查是否是预定义的,如果预定义并选中它 if (preDefined !== null && opt.val() === preDefined[0]) { opt.attr('selected', true); } } } // 将 select 元素插入 dom 中后立即触发 select2 $(el).on('dtsb-inserted', function () { if ($(el).hasClass('select2-hidden-accessible')) { $(el).select2('destroy'); } $(el).select2({ placeholder: 'Value' }); if (preDefined !== null) { $(el).val(preDefined[0]); $(el).trigger('input'); } }); return el; }, // 简单的搜索函数,比较来自表格的值和来自 select2 元素的比较 // 这些值在 `inputValue` 中检索到 search: function (value, comparison) { return value === comparison[0]; } } }; $('#example').DataTable({ columnDefs: [{ type: 'office', targets: 2 }], layout: { top1: 'searchBuilder' } });

除了上述代码之外,还加载了以下 Javascript 库文件以用于本示例

    以下显示的 HTML 是原始 HTML 表元素,在 DataTables 进行增强之前

    除了从库文件加载的部分内容外,此示例还使用了一些其他 CSS(如下所示),以便正确显示该表。下面显示了使用的其他 CSS

    加载了以下 CSS 库文件以用于本示例,为表格提供样式

      此表格通过 Ajax 加载数据。以下显示了已加载的最新数据。此数据将随着加载任何其他数据而自动更新。

      用于对该表执行服务器端处理的脚本如下所示。请注意,这只是一个使用 PHP 的示例脚本。服务器端处理脚本可以使用任何语言编写,方法是使用 DataTables 文档中描述的协议

      其他示例