65.9K
CodeProject 正在变化。 阅读更多。
Home

扩展 DataTables 范围过滤器

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (2投票s)

2011年10月28日

CPOL

2分钟阅读

viewsIcon

25026

downloadIcon

407

DataTables 插件扩展,包含范围过滤器。

引言

DataTables 插件提供了一种非常高效且简便的方法,可以使用基本的 HTML 和 JavaScript 在客户端集成网格视图。 使用此插件,您可以用很少的代码行生成类似以下的输出

Click to enlarge image

背景

最好的地方在于,您可以使用此插件轻松获得排序和过滤功能。 我们可以使用文本框或选择框进行过滤。 甚至可以像上面的图片显示的那样按范围进行过滤。 我有一个特殊的需求,需要我在范围类型的列中使用选择框。 因此,我需要修改该插件。 我已经更新了该插件,以便也可以在范围类型的字段中使用选择框。

Using the Code

为了实现此功能,我做了以下操作

步骤 1

我需要在 jquery.dataTables.columnFilter.js 中做的第一个更改是更新 fnCreateRangeInput 方法。 我包含了两个参数,用于说明范围过滤器的类型(文本框或选择下拉菜单)& 第二个参数用于在它是选择框的情况下提供值。 以下是 fnCreateRangeInput 方法中的代码更新

/* 	Customized code which can filter data with the select columns between two values
*	Updated By: 	Muhammad Waseem Arfi
*/

if(oSelect == "")
{
	from = $('<input type="text" rel="' + i + '" id="' + 
	  sFromId + '" class="number_range_filter" />');
}
else
{
	from = '<select rel="' + i + '" id="' + sFromId + 
	  '" class="number_range_filter"><option value="'+
	  aData[0]+'">ALL</option>';

	var j = 0;
	var iLen = aData.length;
	for (j = 0; j < iLen; j++) 
	{
		if (typeof (aData[j]) != 'object') 
		{
			from += '<option value="' + escape(aData[j]) + 
			        '">' + aData[j] + '</option>';
		}
		else 
		{
			from += '<option value="' + escape(aData[j].value) + 
			        '">' + aData[j].label + '</option>';
		}
	}
	from += '</select>';
}

th.append(from);
th.append(_fnRangeLabelPart(1));
var sToId = oTable.attr("id") + '_range_to_' + i;
if(oSelect == "")
{
	to = $('<input type="text" rel="' + i + '" id="' + 
	       sToId + '" class="number_range_filter" />');
}
else
{
	to = '<select rel="' + i + '" id="' + sToId + 
	     '" class="number_range_filter"><option value="'+ 
	     aData[aData.length-1] +'">ALL</option>';
	var j = 0;
	var iLen = aData.length;
	for (j = 0; j < iLen; j++) 
	{
		if (typeof (aData[j]) != 'object') 
		{
			to += '<option value="' + escape(aData[j]) + 
			      '">' + aData[j] + '</option>';
		}
		else 
		{
			to += '<option value="' + escape(aData[j].value) + 
			      '">' + aData[j].label + '</option>';
		}
	}
	to += '</select>';
}
	
/* Code update ends here */

我已在方法中包含了添加选择框的代码。 在“From”选择框中,默认选项将是传递的数组中的第一个值,而“To”将包含最后一个值。

第二步

然后,我更新了 main 方法中的 case 语句,更改如下所示

case "number-range":
    fnCreateRangeInput(oTable,"","");
    break;
case "number-range-select":
    fnCreateRangeInput(oTable, "select",aoColumn.values);
    break;

步骤 3

完成此操作后,将很容易使用新的范围过滤器类型,以下是编写 JavaScript 以调用此方法的方式

$('#example').dataTable({"bFilter": true, 
  "bDisplayLength":false  }).columnFilter({ sPlaceHolder: "head:after", 
  aoColumns: [{ type: "select" }, {type: "select" },
  { type: "number-range-select",values: [ "10", "50", "100"]}]});

第三行显示了名为“number-range-select”的新字段类型的使用。 一旦我们编写了这段代码,范围列过滤器将如下所示

Click to enlarge image

历史

  • 2011年10月28日:初始发布
© . All rights reserved.