锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / 网站前端开发中级 / 具备多列过滤器的jQuery DataTables
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

具备多列过滤器的jQuery DataTables

本文原文来自:https://www.codeproject.com/。源代码请到上面链接上自行下载。本文对链接里的英文关键位置进行了翻译,禁止转载,祝大家学习愉快,有更多问题请找锐英源孙老师,QQ396806883,微信ryysoft。


介绍


Jquery datatable提供单独的列过滤,但不提供列组过滤。此外,我们只能从每列中选择一个项目。本文实际演示了如何利用列级过滤创建一个自定义过滤器,只是像Excel的过滤器,即用户可以输入过滤项目,这些项目将被选择在主网格。

背景

本文使用Jquery Datatable作为网格和过滤器API。请看看这里的实际文档。

使用代码

此代码使用配置有static Json dataset的Jquery Datatable 的基本初始化功能。但是,dataset可以通过Web服务轻松地集成。
一旦表初始化,它调用configFilter函数,调用参数是输入数组类型,传递的是所需列的序数。此函数实际上循环传递的每个列,并创建一个过滤器对话框,对话框带有独立数据,这个数据列在一个独立列下。
示例:如果传递的输入数组是[1,2],则它将创建两个过滤器弹出/对话框,用了列2和列3的数据(数组是基于零索引的)。
实际的源代码如下:
// 此函数初始化过滤器中的内容modal
function configFilter($this, colArray) {
setTimeout(function () {
var tableName = $this[0].id;
var columns = $this.api().columns();
$.each(colArray, function (i, arg) {
$('#' + tableName + ' th:eq(' + arg + ')').append
('<img src="http://www.icone-png.com/png/39/38556.png"
class="filterIcon" onclick="showFilter(event,\'' +
tableName + '_' + arg + '\')" />');
});

                var template = '<div class="modalFilter">' +
'<div class="modal-content">' +
'{0}</div>' +
'<div class="modal-footer">' +
'<a href="#!"
onclick="clearFilter(this, {1}, \'{2}\');" 
class=" btn left waves-effect waves-light">Clear</a>' +
'<a href="#!"
onclick="performFilter(this, {1}, \'{2}\');"
class=" btn right waves-effect waves-light">Ok</a>' +
'</div>' +
'</div>';
$.each(colArray, function (index, value) {
columns.every(function (i) {
if (value === i) {
var column = this, content = '<input type="text"
class="filterSearchText"
onkeyup="filterValues(this)" /> <br/>';
var columnName = $(this.header()).text().replace(/\s+/g, "_");
var distinctArray = [];
column.data().each(function (d, j) {
if (distinctArray.indexOf(d) == -1) {
var id = tableName + "_" + columnName + "_" + j;
content += '<div><input type="checkbox" value="' +
d + '"  id="' + id + '"/>
<label for="' + id + '"> ' +
d + '</label></div>';
distinctArray.push(d);
}
});
var newTemplate = $(template.replace('{0}', content).replace
('{1}', value).replace('{1}', value).replace('{2}', tableName).replace
('{2}', tableName));
$('body').append(newTemplate);
modalFilterArray[tableName + "_" + value] = newTemplate;
content = '';
}
});
});
}, 50);
过滤器实际上看起来像这样:
https://www.codeproject.com/KB/Articles/1137325/filter__3_.png
https://www.codeproject.com/KB/Articles/1137325/filter2.png
一旦基于期望的列来初始化过滤器,过滤器弹出框可以通过列标题的过滤器图标点击来激活。用户现在可以在文本框中键入或单击复选框,然后按'确定'。现在将在网格上应用过滤器,并选择匹配的行。“清除”按钮。实际的源代码可以在压缩文件夹中找到。
//Execute the filter on the table for a given column
        function performFilter(node, i, tableId) {
            var rootNode = $(node).parent().parent();
            var searchString = '', counter = 0;

            rootNode.find('input:checkbox').each(function (index, checkbox) {
                if (checkbox.checked) {
                    searchString += (counter == 0) ? checkbox.value : '|' + checkbox.value;
                    counter++;
                }
            });
            $('#' + tableId).DataTable().column(i).search(
                searchString,
                true, false
            ).draw();
            rootNode.hide();
            $('#mask').hide();
        }

结论

目前,这会对从选定列中过滤的记录的列组进行过滤。我们可以轻松扩展它以支持级联过滤器(列过滤器仅包含由其他活动过滤器过滤的数据)。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内