深入解析DataTable如何过滤

此DataTable指的是SpryMedia专为HTML Table设计和开发的页面插件,官方站点是:http://legacy.datatables.net/index。

关于oSettings.aiDisplayMaster, oSettings.aiDisplay与oSettings.aoData

无论是从JSON中获取的行数据,还是从DOM元素中获取的行数据,在表初始化之后,皆存储在oSettings.aoData中。有多少条记录aoData数组就有多长。

而aiDisplayMaster则用于记录aoData中每行数据在根据列排序之后的位置。这个排序过程被安排在_fnSort()方法中。

并不是每行数据都需要显示,于是就有aiDisplay则用于保存需要显示的行记录,及其位置。aiDisplay来源于aiDisplayMaster,是aiDisplayMaster排序之后的子集。

在不使用filter的情况下,aiDisplay完全等于aiDisplayMaster。

过滤

所谓过滤其实是从aiDisplayMaster中,根据aoData的数据和匹配条件,把需要显示的行数据的序号按照aiDisplayMaster中已经排好的顺序保存在aiDisplay数组中。

过滤分全局过滤、基于列过滤和自定义过滤。

过滤在_fnFilterComplete()方法中执行,执行顺序是:全局过滤、基于列过滤、自定义过滤。这三个过滤分别对应:_fnFilter(), _fnFilterColumn(), _fnFilterCustom()。

全局过滤

全局过滤又分强制重新过滤和非强制重新过滤。所谓强制重新过滤即完全重新建立aiDisplay数组。而非强制重新过滤则是在前aiDisplay的基础上继续过滤。

需要注意的是,如果全局过滤字符串为空,aiDisplay将等于aiDisplayMaster。

使用强制全局过滤的情况包括:

  • 调用fnFilter()方法,无论有没有指定column;
  • 直接调用_fnFilter(oSettings,sInput, 1);
  • 调用_fnSort()方法;
  • 调用_fnFilterComplete()方法,但过滤字符串为空。

使用非强制全局过滤的情况包括:

  • 调用_fnReDraw()方法;
  • 调用_fnInitialize()方法,即初始化的时候;

基于列过滤

全局过滤之后就是列过滤,列过滤是在全局过滤的结果集aiDisplay上再过滤掉一些不需要显示的行数据序号。

列过滤依据来源于列选项mRender中当type==filter时返回的字符串。

列过滤在_fnFilterColumn方法中执行。

自定义过滤

自定义过滤是过滤的最后一步,是对列过滤的结果集aiDisplay的进一步过滤,这个过滤使用的方法需要定义在DataTable.ext.afnFiltering数组中。

每个自定义过滤方法接受三个参数(从左往右):

  • oSettings;
  • 行数据;
  • 行序号;

多关键字过滤

fnFilter方法中有一个参数是bSmart,但这这参数为true 时,关键字间的空格将作为分隔符。

深入解析DataTable如何过滤,布布扣,bubuko.com

时间: 2024-10-11 23:25:38

深入解析DataTable如何过滤的相关文章

c# DataTable select 过滤返回新DataTable

Select(); Select("id>='3' and name='3--hello'");//支持and Select("id>='3' or id='1'");//支持or Select("name like '%hello%'");//支持like Select("id>5","id desc"); Select("id>5", "id des

.Net工具类--表达式目录树解析DataReader和DataTable

一.概述 在项目中经常会使用SQL去操作数据库,在读取数据的时候返回结果一般是DataReader和DataSet,其中DataaSet里面可以包含多个DataTable. 读取到数据之后,一般情况下,我们需要把DataReader和DataSet解析成另外的数据实体和数据集合,有人会选择反射.硬编码,这些都是解决方案, 其实还有其他的解决方案,那就是表达式目录树. 二.解析DataReader 这个是生成表达式的方法. /// <summary> /// SqlDataReader生成表达式

python中的迭代解析有点map(function,list)函数的意思

迭代解析,就是利用迭代协议将列表(当然不仅仅是列表,也可以是文件对象或者词典等等,这里用列表a来处理)中的item取出来(for x in a)在表达式x+10中进行同样的处理: 而map函数也是将列表中的item取出来进行function的处理,当然这个不是利用迭代协议,而是利用的map的思想.MapReduce思想,很厉害的. 列表解析有个过滤用的if还是很棒的.还有两个for循环也是很不错的

详解Java解析XML的四种方法

(1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ①允许应用程序对数据和结构做出更改. ②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据. [缺点] ①通常需要加载整个XML文档来构造层次结构,消耗资源大. [解析详解] ①构建Document对象: DocumentBuilderFactory dbf = DocumentBu

Textarea - 百度富文本编辑器插件UEditor

UEditor各种实例演示 Ueditor 是百度推出的一款开源在线 HTML 编辑器. 主要特点: 轻量级:代码精简,加载迅速. 定制化:全新的分层理念,满足多元化的需求.采用三层架构:1. 核心层: 为命令层提供底层API,如range/selection/domUtils类.2. 命令插件层: 基于核心层开发command命令,命令之间相互独立.3. 界面层: 为命令层提供用户使用界面.满足不同层次用户的需求. 浏览器兼容兼容Mozilla, MSIE, FireFox, Maxthon,

SQL日志分析的一个小工具

最近要调优SQL语句,于是运维倒了一份SQL日志给我,我需要知道那一些是查询慢,更新多,总之就是哪些语句执行多. 1.需要将MySQL日志解析:例如: 2.需要实现成: 思路: 1.SQL语句分类:SELECT.UPDATE.INSERT.DELETE(增.删,改,查) 2.针对更新语句.插入语句单独处理 3.正则匹配.字符串Split 4.Dictionary<string, int>键值组合 5.异步读写 开始代码: 1.正则表达式: /// <summary> /// 关键的

如何用 Hadoop/Spark 构建七牛数据平台

数据平台在大部分公司都属于支撑性平台,做的不好立刻会被吐槽,这点和运维部门很像.所以在技术选型上优先考虑现成的工具,快速出成果,没必要去担心有技术负担.早期,我们走过弯路,认为没多少工作量,收集存储和计算都自己研发,发现是吃力不讨好.去年上半年开始,我们全面拥抱开源工具,搭建自己的数据平台. 1.数据平台设计理念 公司的主要数据来源是散落在各个业务服务器上的半结构化日志,比如系统日志.程序日志.访问日志.审计日志等.日志是最原始的数据记录,如果不是日志,肯定会有信息上的丢失.说个简单的例子,需求

pcap学习

[cpp] view plaincopyprint? #include <pcap.h> char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *pcap_open_live(const char *device, int snaplen,int promisc, int to_ms, char *errbuf) pcap_t *pcap_open_dead(int linktype, int snaplen) pcap_t *pcap_open_offline(cons

CenOS 安装PF_RING

1.       概述 PF_RING是Luca Deri发明的提高内核处理数据包效率,并兼顾应用程序的补丁,如Libpcap和TCPDUMP等,以及一些辅助性程序(如ntop查看并分析网络流量等).PF_RING是一种新型的网络socket,它可以极大的改进包捕获的速度.并且有如下特征: 1) 可以用于Linux 2.6.18以上的内核: 2) 4.x版本的PF_RING可以直接应用于内核,不需要给内核打补丁: 3) PF_RING驱动可以进行包捕获的加速: 4) 支持使用商用网络适配器的10