深度分析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 ...
随机推荐
- How a C++ compiler implements exception handling
Introduction One of the revolutionary features of C++ over traditional languages is its support for ...
- niu人
金步国简历 金步国简历 基本资料 姓名 金步国 性别 男 年龄 30 籍贯 江苏 淮安 院校 同济大学 专业 土木工程 学历 本科肄业 工作经验 5年 期望地点 长江以南 期望薪水 18000/月 个 ...
- codeforces 325B Stadium and Games
这道题思路很简单,设刚开始队伍数为d=2^p*x,其中x是奇数,则比赛场次n=(2^p-1)*x+(x-1)*x/2,然后从0开始枚举p的值,接着解一元二次方程x^2+(2^(p+1)-3)x-2*n ...
- 关于Oralce数据库优化的几点总结
个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本 ...
- 安卓MP3播放器开发实例(1)之音乐列表界面
学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正 ...
- 使用KnockoutJs+Bootstrap实现分页
[后端人员耍前端系列]KnockoutJs篇:使用KnockoutJs+Bootstrap实现分页 一.引言 由于最近公司的系统需要改版,改版的新系统我打算使用KnockoutJs来制作Web前端 ...
- Indiegogo: An International Crowdfunding Platform to Raise Money
Indiegogo: An International Crowdfunding Platform to Raise Money The world's funding platform. Fund ...
- 在CodeBlocks 开发环境中配置使用OpenCV (ubuntu系统)
CodeBlocks是一个开放源代码的全功能的跨平台C/C++集成开发环境.CodeBlocks由纯粹的C++语言开发完毕,它使用了蓍名的图形界面库wxWidgets.对于追求完美的C++程序猿,再也 ...
- [WebGL入门]十,矩阵计算和外部库
注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,假设翻译有误,欢迎大家指 ...
- Android编程心得-图片自适应心得
在Android 的开发过程中,我们知道存放图片资源的文件夹是drawable,与它类似的名字的文件夹drawble-hdpi,drawable-ldpi,drawable-mdpi,drawable ...