插件示例
本示例演示如何对自定义列类型使用插件。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 文档中描述的协议。