深度分析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 ...
随机推荐
- 13、Cocos2dx 3.0游戏开发找小三之3.0中的Director :郝萌主,一统江湖
重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706967 游戏中的基本元素 在曾经文章中.我们具 ...
- MySQLdb的安装与使用
一.安装 安装已编译版本号(此方法简便快捷): http://www.codegood.com/downloads 依据自己系统下载,双击安装,搞定 然后import MySQLdb.查看是否成功 我 ...
- vdsm的SSL证书验证过程
1. Copy the VDSM certificate of the RHEV-H(Red Hat Enterprise Virtualization Hypervisor ) host to th ...
- Oracle“记录被另一个用户锁住” 无法更新删除的解决办法
1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 或者用以下命令: select b. ...
- MVC多语言应用
MVC多语言应用 最近发现资源文件是个好东西, 用的好了可以给开发人员借阅不少的时间. 例如做一个多语言的网站, 资源文件就有不小的用处. 这里以MVC4模版项目的登录页为例, 简单说一下过程: 1. ...
- 分布式发布订阅消息系统Kafka
高吞吐量的分布式发布订阅消息系统Kafka--安装及测试 一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览, ...
- Java使用Socket传输文件遇到的问题(转)
1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...
- Palindrome Numbers(LA2889)第n个回文数是?
J - Palindrome Numbers Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
- jquery ajax协调SpringMVCD实现局部刷新IV
feedback.jsp: <%@ page language="java" import="java.util.*" pageEncoding=&quo ...
- redis做RDB时请求超时case
近期在排查redis做rdb时会有部分请求超时的case.初步推断是我们redisserver上开启了THP(Transparent Huge Pages). 1) Linux本身的 ...