使用tablesorter自定义解析器仅用于过滤

时间:2014-11-05 11:52:28

标签: tablesorter

我有一个带复选框列的表,其中使用了过滤器,因此我只能获取选定的行。 我为该列添加了自定义解析器,以使用复选框“已检查”的prop值进行过滤。

问题在于使用tablesorter初始化程序的'headers'选项中的'sorter'属性将解析器添加到列中,这样当我单击某个复选框并触发'update'事件时,将对复选框列和所选行应用排序被移到桌子的底部。

有没有办法将解析器添加到列中,以便它仅用于过滤,而不是用于排序?

UPD :我想我应该澄清一下我要做的事情。 我有一个自定义解析器的复选框,如下所示:

var myCustomParser = {
    id: 'myCustomParser',
    is: function() { return false; },
    format: function(cellText, table, cellNode, cellIndex) {
        return $(cellNode).find('.checkbox-to-find').prop('checked') ? '1' : '0';
    },
    parsed: true,
    type: 'text'
};

然后我将它添加到tablesorter并在初始化器中使用:

$.tablesorter.addParser(myCustomParser);
//...
$table.tablesorter({
    // ...
    headers: {
        0: {sorter: 'myCustomParser'}
    },
    //...
);

这可以启用过滤,但也会应用排序。我有一个复选框,用于选择该列的标题单元格中的所有行,当我单击它时,将应用排序并对复选框进行排序。 这是我现在用来禁用排序的东西:

$table.tablesorter({
    //...
    textSorter: {
        0: function() { return 0; }
    },
    headers: {
        0: {sorter: 'myCustomParser'}
    },
    //...
);

Stub分拣机实际上禁用了排序,同时启用了过滤器。但这似乎是错误的。根据{{​​3}},我不能使用parser选项来设置解析器名称。 filter选项似乎也仅适用于falseparsed值。我希望能够做到这样的事情:

$table.tablesorter({
    // ...
    headers: {
        0: {parser: 'myCustomParser'}
    },
    //...
);

如果这样可以在禁用排序的同时解析(并使过滤使用这些已解析的值),那就太棒了。

P.S。我发现repo中有docs,但问题仍然存在:如何指定解析器以便不启用排序。

1 个答案:

答案 0 :(得分:2)

我猜你正在使用我的fork of tablesorter。如果是这种情况,将列设置为不排序不会阻止解析器处理该列中的信息。以下是您可能在文档中遗漏的一些信息。

可以使用相关部分中的任何方法(它们都执行相同的操作)按优先级顺序禁用列功能(排序,过滤或解析):

禁用排序(ref

仍然会出现列内容的解析

  • jQuery数据data-sorter="false"
  • 元数据class="{ sorter: false }"。这需要元数据插件。
  • 标题选项headers : { 0 : { sorter: false } }
  • 标题(<th>)类名class="sorter-false"

禁用过滤器(ref

  • jQuery数据data-filter="false"
  • 元数据class="{ filter: false }"。这需要元数据插件。
  • 标题选项headers : { 0 : { filter: false } }
  • 标题(<th>)类名class="filter-false"

    如果使用&#34; all&#34;列外部过滤器,禁用列将包含在查询中。您可以通过在外部过滤器(ref

    的列属性中设置范围来排除已禁用的列
    <input class="search" type="search" data-column="0-2,4,6-7">
    

禁用解析(ref

禁用解析时,将自动禁用排序和过滤,并将存储在缓存中的列数据设置为空字符串。

  • jQuery数据data-parser="false"
  • 元数据class="{ parser: false }"。这需要元数据插件。
  • 标题选项headers : { 0 : { parser: false } }
  • 标题(<th>)类名class="parser-false"

更新:在您的情况下,我会禁用排序(使用上面的任何排序方法),然后使用定制包含复选框的列的自定义textExtraction function

textExtraction : {
    0 : function(node, table, cellIndex) {
        return $(node).find('.checkbox-to-find').prop('checked') ? '1' : '0';
    }
}