zoukankan      html  css  js  c++  java
  • 深度分析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间距格将作为分隔符。

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    apk逆向工具总结
    DAY...
    DAY1-Flask项目
    Django笔记
    DAY8-Python学习笔记
    DAY7-Python学习笔记
    DAY6-Python学习笔记
    DAY5-Python学习笔记
    DAY4-Python学习笔记
    DAY3-Python学习笔记
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4912085.html
Copyright © 2011-2022 走看看