深度分析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;
- 行数据;
- 行序号。
多keyword过滤
fnFilter方法中有一个參数是bSmart。但这种说法是true 时刻,keyword间距格将作为分隔符。
版权声明:本文博主原创文章,博客,未经同意不得转载。
深度分析DataTable如何筛选的更多相关文章
- const与readonly深度分析(.NET)
前言 很多.NET的初学者对const和readonly的使用很模糊,本文就const和readonly做一下深度分析,包括: 1. const数据类型的优势 2. const数据类型的劣势 3. r ...
- 转:[gevent源码分析] 深度分析gevent运行流程
[gevent源码分析] 深度分析gevent运行流程 http://blog.csdn.net/yueguanghaidao/article/details/24281751 一直对gevent运行 ...
- 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)
写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...
- AndroidService 深度分析(2)
AndroidService 深度分析(2) 上一篇文章我们Service的生命周期进行了測试及总结. 这篇文章我们介绍下绑定执行的Service的实现. 绑定执行的Service可能是仅为本应用提供 ...
- 深度分析如何在Hadoop中控制Map的数量
深度分析如何在Hadoop中控制Map的数量 guibin.beijing@gmail.com 很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数 ...
- MapReduce深度分析(二)
MapReduce深度分析(二) 五.JobTracker分析 JobTracker是hadoop的重要的后台守护进程之一,主要的功能是管理任务调度.管理TaskTracker.监控作业执行.运行作业 ...
- MapReduce深度分析(一)
MapReduce深度分析(一) 一.数据流向分析 图为MapReduce数据流向示意图 步骤1.输入文件从HDFS流向到Mapper节点.在一般情况下,存储数据的节点就是Mapper运行的节点,不需 ...
- 【JVM】深度分析Java的ClassLoader机制(源码级别)
原文:深度分析Java的ClassLoader机制(源码级别) 为了更好的理解类的加载机制,我们来深入研究一下ClassLoader和他的loadClass()方法. 源码分析 public abst ...
- 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题
原文:深度分析Java的枚举类型--枚举的线程安全性及序列化问题 枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和clas ...
随机推荐
- Android平均分布的布局图像的下一行
Android下一行平均分布图片的布局 这是一个非经常见的需求,比方有三个图片button,须要在底部三个平均,比方下个样例: 下面是布局文件 <LinearLayout android:lay ...
- windows时间函数
介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执 行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记 ...
- Window平台搭建Redis分布式缓存集群 (一)server搭建及性能測试
百度定义:Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对很多其它.包含string(字符串).list(链表).set(集合).zset(sort ...
- [docker]docker的四种网络方式
声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! bridge方式(默认) H ...
- 解决编译apache出现的问题:configure: error: APR not found . Please read the documentation - ____哊.時^随记 - 51CTO技术博客
解决编译apache出现的问题:configure: error: APR not found . Please read the documentation - ____哊.時^随记 - 51CTO ...
- ovirt node的安装简介
Ovirt安装模式 支持install,update,downupdate,reinstall四种安装方式. install:全新安装(以前未安装过ovirt node). update:安装比 ...
- Python使用cx_Oracle模块连接操作Oracle数据库
1. 简单介绍 cx_Oracle 是一个用来连接并操作 Oracle 数据库的 Python 扩展模块, 支持包含 Oracle 9.2 10.2 以及 11.1 等版本号 2.安装 最好是去官网h ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 站点设置
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 站点设置 你应该熟悉(假设还咩有)的SharePo ...
- Visual Leak Detector(vld)无法显示内存泄露文件名称与行号
使用VLD測有没内存泄露的时候,出现(File and line number not available): (Function name unavailable) 查看VS控制台,发现 已载入&q ...
- java.lang.IllegalAccessError: class javax.activation.SecuritySupport12 cannot access its superclass
最近加入新的项目组,eclipse + tomcat7 + spring +ibatis + restful 遇到了这样的问题, 说是不能访问父类,我一开始以为是版本的原因,但是久经更改,错误依然,实 ...