`

表格列过滤功能 [系列2]

    博客分类:
  • js
阅读更多
================================================================================================
本系列sample是工作中自己的积累, 提供给大家交流;
如果有好的意见或建议,欢迎撇砖
 

================================================================================================
columnFilter.js
/**
 * 表格过滤功能
 * tabObj 表格对象
 * 特点:
 * 1. 支持单元格合并后的表格;
 * 2. 支持多列同时过滤;
 * 3. 对外部提供接口:callSetFilterFunc,callDataFunc,callSetDefaultFunc分别调用外部的动态获取下拉框选项、给过滤的下拉框设定默认选项、保存所设置的过滤条件到页面hidden;
 * 4. 过滤的触发交给页面的查询按钮;
 *
 * Sample:
 * <script>
 *		 var params = {
 *			filterCols:[1,2,3,4,5,6],  				//参数"[1,2,3,4,5,6]":给第2至7列增加过滤功能(列序号是从0开始计)
 *			lastIndexOfMaxCol:1,					//右边起,最后一个无过滤条件的列的逆序号,从0开始计
 *			callDataFunc:getFilterOptions,			//动态获取下拉框选项数据
 *			callSetDefaultFunc:setDefaultCondition,	//给过滤的下拉框设定默认选项
 *			callSetFilterFunc:setFilter,			//保存过滤下拉框的选项
 *			headerRow:1								//列表表头行序号,默认是0
 *		};
 *		var columnFilter = new ColumnFilter($("tabDecisionPath"));
 *		columnFilter.addHandler(params);
 * </script>
 */
function ColumnFilter(tabObj){
	// 表格对象
	var _tabObj = tabObj; 
	//表格列数
	var colNumber;
	//如果列数是动态变化的,则用maxCol来表示需要过滤的最大列序 
	var maxCol;  
	//下拉选项
	var select = "";
	
	//参数
	var params = {
		//要添加过滤功能的列的数组
		//filterCols: [1,2,3,4,5,6],
		//右边起,最后一个无过滤条件的列的逆序号,从0开始计
		//lastIndexOfMaxCol:1,
		//动态获取下拉框选项数据
		//callDataFunc:getFilterOptions,
		//给过滤的下拉框设定默认选项
		//callSetDefaultFunc:setDefaultCondition,
		//保存过滤下拉框的选项
		//callSetFilterFunc:setFilter,
		//列表表头行序号,默认是0
		headerRow: 0
	};
	
	//方法集合
	var methods = {
		/** 检查参数是否合法 */
		doCheckParams:function(parameters){
			if(parameters.filterCols==null || parameters.filterCols==undefined || parameters.filterCols.length==0){return false;};
			if(parameters.lastIndexOfMaxCol==null || parameters.lastIndexOfMaxCol==undefined){return false;};
			if(parameters.callDataFunc==null || parameters.callDataFunc==undefined){return false;};
			if(parameters.callSetDefaultFunc==null || parameters.callSetDefaultFunc==undefined){return false;};
			if(parameters.callSetFilterFunc==null || parameters.callSetFilterFunc==undefined){return false;};
			if(parameters.headerRow==null || parameters.headerRow==undefined){parameters.headerRow=params.headerRow;};
			
			this.params = parameters;
			return true;
		},
		/** 检查参数是否越界 */
		doCheckCol:function(col){
			if(col>colNumber-1){
				return false; 
			}
			return true;
		},
		/** 过滤 */
		setFilterValue:function(obj,col){
			var val = obj.options[obj.selectedIndex].value;
			if(obj.selectedIndex==0){
				val = "";
			}
			var originText = obj.options[0].value;
			this.params.callSetFilterFunc({key:originText, value:val});
		},
		/** 生成过滤器 */
		doRender:function(col, headerText){
			var curCol = col;
			//拼装下拉框
			select = "<select id='" + headerText + "' onchange='columnFilter.setFilterValue(this," + curCol + ");' style='width:100%;height:100%'>" + 
					 "<option value='" + headerText + "'>" + headerText + "</option>";
					 
			var optionsStr =this.params.callDataFunc(headerText);
			if(optionsStr==""){return false;}
			var options = [];
			options = optionsStr.split("|");
			for(var i=0; i<options.length; i++){
				var arr = options[i].split(",");
				options[i]={id:arr[0],name:arr[1]};
			}
			for(var i=0;i<options.length;i++){
				select += "<option value='" + options[i].id + "'>" +options[i].name + "</option>";
			}
			select += "</select>";
			_tabObj.rows[this.params.headerRow].cells[curCol].innerHTML = "<div style='width:100%;height:100%;' >" +select + "</div>";
			return true;
		}, 
		/** 
		 * 给过滤的下拉框设定默认选项
		 */
		setDefault:function(headerText){
			this.params.callSetDefaultFunc($(headerText));
		},
		/**
		 * 绑定过滤事件
		 * params 参数
		 */
		addHandler:function(parameters){
			//检查参数是否合法
			if(!this.doCheckParams(parameters)){
				alert("参数错误!");
				return;
			}
		 
			//列表内容行不能为空
			if($("trr0")==undefined){return;} 
			if(this.params.filterCols==undefined || this.params.filterCols.length==0){return;}
			colNumber = _tabObj.rows[this.params.headerRow].cells.length;
			maxCol = colNumber - this.params.lastIndexOfMaxCol - 2;
			for(var i=0; i<this.params.filterCols.length;i++){
				var col = this.params.filterCols[i];
				if(!this.doCheckCol(col)){return;}
				if(maxCol!=undefined){
					if(col>maxCol){return;}
				}
				//给第col列Header增加单击事件       
				var headerText = _tabObj.rows[this.params.headerRow].cells[col].innerText;
				
				//生成过滤下拉框
				if(!this.doRender(col, headerText)){
					continue;
				}
				
				//设置下拉框默认选项
				this.setDefault(headerText);
			}
		}
	};
	
	return methods; 
}



list.jsp

<%@ page contentType="text/html;charset=gbk"%>

<SCRIPT>
//...部分无关js略去


/**
 * 查找某个指标的所有约束条件
 * indexName 指标名称,如:AADT, PCI, RQI, PSSI, RDI, SRI
 * return: options sample:"8a819be52af9ed05012afa1dc007000d","重交通(>=8000)"|"8a819be52af9ed05012afa1e087a000e","中交通(8000->4000)"
 */
function getFilterOptions(indexName){
	var options;
	var parameters = "indexStr=" + indexName + "&surfaceType=" +  $("surfaceType").value + "&roadGrade=" + $("roadGrade").value; 
	var url = "<ww:url value='/decisionPath!getFilterOptions.action'/>";
	var ajax = new Ajax.Request(
		url,
		{
			method:'post',
			parameters:parameters,
			requestHeaders:{dynenc:"UTF-8"},
			asynchronous: false,
			onComplete:function(oriReq){ 
				options=oriReq.responseText.trim();
			}
		}
	)
	return options;
}

/**
 * 给过滤的下拉框设定默认选项
 * selObj: 下拉框对象
 */
function setDefaultCondition(selObj){ 
	if($("decisionPath." + selObj.id + "Id").value!=""){
		selObj.value = $("decisionPath." + selObj.id + "Id").value;
	}
}

/**
 * 保存过滤查询条件
 */
function setFilter(condition){
	document.getElementById("decisionPath." + condition.key + "Id").value = condition.value;
}

</SCRIPT>
  
<BR>
<form name="actionForm" method="post">
    <table class="table-border" align="center" cellspacing="1" cellpadding="1" width="100%" border="0" id="tabDecisionPath">
        //....中间表格内容略					
    </table>
</form>

<SCRIPT LANGUAGE="JavaScript">
doInit();

var params = {
	filterCols:[1,2,3,4,5,6],
	lastIndexOfMaxCol:1,
	callDataFunc:getFilterOptions,
	callSetDefaultFunc:setDefaultCondition,
	callSetFilterFunc:setFilter,
	headerRow:1
};
var columnFilter = new ColumnFilter($("tabDecisionPath"));
columnFilter.addHandler(params);
</SCRIPT>



  • 描述: 表格列过滤图示
  • 大小: 42.3 KB
0
0
分享到:
评论

相关推荐

    表格列过滤功能 [系列1]

    本系列教程将重点关注“表格列过滤功能”,这是一种实用的功能,能够帮助用户快速筛选和定位表格中的特定信息。通过实现这一功能,我们可以提高数据查看的效率,减少用户在大量数据中寻找目标值的时间。 首先,我们...

    很好很强大的datagridview(强大的过滤功能和其他设置)包含源码

    本资源"很好很强大的datagridview(强大的过滤功能和其他设置)"显然集中展示了该控件的一些高级用法,特别是其过滤功能和其他自定义设置,这对于数据量大或者需要用户进行复杂操作的应用场景非常有用。 首先,让我们...

    smarttable带排序和过滤功能的jQuery表格插件

    2. **过滤功能**:SmartTable提供了字段过滤功能,允许用户输入关键词筛选符合特定条件的行。这增强了用户体验,让用户能够快速定位到感兴趣的数据。 3. **分页显示**:当表格数据量过大时,SmartTable可实现分页...

    easyui-datagrid可编辑可过滤的DEMO

    EasyUI DataGrid的过滤功能通过在列头添加过滤图标实现,用户可以输入文本、选择范围或者使用下拉框等进行过滤。过滤条件可以是单一的,也可以组合使用,提供了非常灵活的筛选机制。 在实际应用中,这些功能对于...

    vuetablecomponent用于展示表格的Vue组件支持过滤和排序

    2. **过滤功能**:`vue-table-component`允许用户通过输入框对表格数据进行实时过滤。这通常通过在组件上定义过滤条件并监听用户的输入事件实现,使用户能快速找到特定的信息。 3. **排序功能**:对于有多个列的...

    EXcel 过滤器.rar

    Excel过滤器是Excel电子表格软件中的一个重要功能,它允许用户快速筛选和查看数据表中的特定信息,从而提高数据处理和分析的效率。本压缩包文件“EXcel 过滤器.rar”很可能包含了一系列关于如何使用Excel过滤器的...

    表格变色功能

    在标签“表格”中,我们可以联想到一系列与表格处理相关的知识点: 1. 数据输入:表格提供了一种结构化的数据输入方式,可以方便地组织和管理大量信息。 2. 公式和函数:表格软件通常支持各种计算公式和统计函数,...

    vuedatatablesVueJS2数据表格

    5. **过滤(filter)**:在`vuedatatables`中,过滤功能允许用户根据特定条件筛选表格数据,这通常通过在表格列上设置输入框或者下拉菜单实现,用户输入关键词后,表格会实时更新显示匹配的行。 6. **排序(sort)*...

    BCGDBGrid多功能数据表格控件

    - 这个文件很可能是BCGDBGrid的演示程序,它包含了一系列示例,展示了控件的各种功能和用法,对于学习和理解BCGDBGrid的使用非常有帮助。 总的来说,BCGDBGrid是一款高效且功能全面的数据表格控件,适合于开发要求...

    Axure夜话之中继器系列视频教程之中继器表格分页动态页数.rar

    《Axure夜话之中继器系列视频教程之中继器表格分页动态页数》是针对交互设计师和产品经理的一款深入学习资源,由资深讲师程矢在老二牛车教育平台上讲解。该教程主要聚焦于Axure中继器(Repeater)功能的使用,特别是...

    Bootstrap表格编辑生成器插件.rar

    这可以通过集成BootstrapTable的内置搜索和过滤功能来实现。 4. **分页**:支持分页功能,使大量数据的加载和展示更为高效。用户可以设定每页显示的数据量,并通过导航按钮在不同页面间切换。 5. **排序**:允许...

    js网页 表格 控件

    2. **Handsontable**:这是一个强大的数据网格组件,支持数据编辑、拖放、列宽调整、过滤等功能,适合大型数据集的管理。 3. **Ag-Grid**:高性能的表格库,支持大量的数据处理,拥有丰富的API和大量的可配置选项,...

    bootstrap动态表格模板

    数据筛选功能允许用户根据特定条件过滤表格中的行,以显示符合要求的信息。在Bootstrap的动态表格模板中,这通常通过输入框实现,用户可以在输入框中输入关键词,系统会实时更新表格,只显示包含该关键词的行。这种...

    TMS Pack打造多功能表格 v1.0源文件..rar

    通过这个组件包,开发者可以利用TMS Pack的强大功能,创建出拥有列排序、过滤、分组、数据绑定、自定义渲染等高级特性的表格。此外,由于提供了源代码,开发者还可以根据实际需求对组件进行二次开发,以实现更复杂的...

    技巧16系列产生在行或列有何不同共2页.pdf.zip

    【标题】和【描述】提及的是一个关于"技巧16系列"的主题,主要探讨的是在数据处理中,操作发生在“行”与“列”之间存在的差异。...建议获取并阅读“技巧16系列产生在行或列有何不同共2页.pdf”以获取完整信息。

    CSS3响应式多功能表格样式特效.rar

    此外,CSS3还支持数据表的分组、排序和过滤功能。通过使用`display: table`、`display: table-row`和`display: table-cell`等CSS属性,我们可以将HTML元素布局为表格结构。同时,可以利用JavaScript库如jQuery或...

    易语言自绘表格样式

    为了绘制表格,我们需要创建一系列子程序,如初始化表格、绘制单元格、计算单元格尺寸等。 3. **创建与销毁**:在程序运行过程中,创建表格对象并分配资源,然后在不再需要时释放这些资源,这是内存管理的基础。在...

    WEB表格控件 DateTables

    它提供了一系列强大的功能,如排序、过滤、分页以及对大量数据的处理,使网页上的表格更加交互式和用户友好。 **描述分析:**"开源的WEB表格控件 DataTables" 开源意味着DataTables的源代码是公开的,允许开发者...

    JIDE Grids (表格)开发员技术手册

    - **过滤功能**:`FilterableTableModel`支持按列过滤,通过`FilterFactoryManager`和`CustomFilterEditor`等工具实现。 - **颜色和日期相关组件**:提供了多种颜色和日期选择组件,包括`ColorChooserPanel`、`...

Global site tag (gtag.js) - Google Analytics