================================================================================================
本系列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
分享到:
相关推荐
本系列教程将重点关注“表格列过滤功能”,这是一种实用的功能,能够帮助用户快速筛选和定位表格中的特定信息。通过实现这一功能,我们可以提高数据查看的效率,减少用户在大量数据中寻找目标值的时间。 首先,我们...
本资源"很好很强大的datagridview(强大的过滤功能和其他设置)"显然集中展示了该控件的一些高级用法,特别是其过滤功能和其他自定义设置,这对于数据量大或者需要用户进行复杂操作的应用场景非常有用。 首先,让我们...
2. **过滤功能**:SmartTable提供了字段过滤功能,允许用户输入关键词筛选符合特定条件的行。这增强了用户体验,让用户能够快速定位到感兴趣的数据。 3. **分页显示**:当表格数据量过大时,SmartTable可实现分页...
EasyUI DataGrid的过滤功能通过在列头添加过滤图标实现,用户可以输入文本、选择范围或者使用下拉框等进行过滤。过滤条件可以是单一的,也可以组合使用,提供了非常灵活的筛选机制。 在实际应用中,这些功能对于...
2. **过滤功能**:`vue-table-component`允许用户通过输入框对表格数据进行实时过滤。这通常通过在组件上定义过滤条件并监听用户的输入事件实现,使用户能快速找到特定的信息。 3. **排序功能**:对于有多个列的...
Excel过滤器是Excel电子表格软件中的一个重要功能,它允许用户快速筛选和查看数据表中的特定信息,从而提高数据处理和分析的效率。本压缩包文件“EXcel 过滤器.rar”很可能包含了一系列关于如何使用Excel过滤器的...
在标签“表格”中,我们可以联想到一系列与表格处理相关的知识点: 1. 数据输入:表格提供了一种结构化的数据输入方式,可以方便地组织和管理大量信息。 2. 公式和函数:表格软件通常支持各种计算公式和统计函数,...
5. **过滤(filter)**:在`vuedatatables`中,过滤功能允许用户根据特定条件筛选表格数据,这通常通过在表格列上设置输入框或者下拉菜单实现,用户输入关键词后,表格会实时更新显示匹配的行。 6. **排序(sort)*...
- 这个文件很可能是BCGDBGrid的演示程序,它包含了一系列示例,展示了控件的各种功能和用法,对于学习和理解BCGDBGrid的使用非常有帮助。 总的来说,BCGDBGrid是一款高效且功能全面的数据表格控件,适合于开发要求...
《Axure夜话之中继器系列视频教程之中继器表格分页动态页数》是针对交互设计师和产品经理的一款深入学习资源,由资深讲师程矢在老二牛车教育平台上讲解。该教程主要聚焦于Axure中继器(Repeater)功能的使用,特别是...
这可以通过集成BootstrapTable的内置搜索和过滤功能来实现。 4. **分页**:支持分页功能,使大量数据的加载和展示更为高效。用户可以设定每页显示的数据量,并通过导航按钮在不同页面间切换。 5. **排序**:允许...
2. **Handsontable**:这是一个强大的数据网格组件,支持数据编辑、拖放、列宽调整、过滤等功能,适合大型数据集的管理。 3. **Ag-Grid**:高性能的表格库,支持大量的数据处理,拥有丰富的API和大量的可配置选项,...
数据筛选功能允许用户根据特定条件过滤表格中的行,以显示符合要求的信息。在Bootstrap的动态表格模板中,这通常通过输入框实现,用户可以在输入框中输入关键词,系统会实时更新表格,只显示包含该关键词的行。这种...
通过这个组件包,开发者可以利用TMS Pack的强大功能,创建出拥有列排序、过滤、分组、数据绑定、自定义渲染等高级特性的表格。此外,由于提供了源代码,开发者还可以根据实际需求对组件进行二次开发,以实现更复杂的...
【标题】和【描述】提及的是一个关于"技巧16系列"的主题,主要探讨的是在数据处理中,操作发生在“行”与“列”之间存在的差异。...建议获取并阅读“技巧16系列产生在行或列有何不同共2页.pdf”以获取完整信息。
此外,CSS3还支持数据表的分组、排序和过滤功能。通过使用`display: table`、`display: table-row`和`display: table-cell`等CSS属性,我们可以将HTML元素布局为表格结构。同时,可以利用JavaScript库如jQuery或...
为了绘制表格,我们需要创建一系列子程序,如初始化表格、绘制单元格、计算单元格尺寸等。 3. **创建与销毁**:在程序运行过程中,创建表格对象并分配资源,然后在不再需要时释放这些资源,这是内存管理的基础。在...
它提供了一系列强大的功能,如排序、过滤、分页以及对大量数据的处理,使网页上的表格更加交互式和用户友好。 **描述分析:**"开源的WEB表格控件 DataTables" 开源意味着DataTables的源代码是公开的,允许开发者...
- **过滤功能**:`FilterableTableModel`支持按列过滤,通过`FilterFactoryManager`和`CustomFilterEditor`等工具实现。 - **颜色和日期相关组件**:提供了多种颜色和日期选择组件,包括`ColorChooserPanel`、`...