我有一个带复选框列的表,其中使用了过滤器,因此我只能获取选定的行。 我为该列添加了自定义解析器,以使用复选框“已检查”的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
选项似乎也仅适用于false
和parsed
值。我希望能够做到这样的事情:
$table.tablesorter({
// ...
headers: {
0: {parser: 'myCustomParser'}
},
//...
);
如果这样可以在禁用排序的同时解析(并使过滤使用这些已解析的值),那就太棒了。
P.S。我发现repo中有docs,但问题仍然存在:如何指定解析器以便不启用排序。
答案 0 :(得分:2)
我猜你正在使用我的fork of tablesorter。如果是这种情况,将列设置为不排序不会阻止解析器处理该列中的信息。以下是您可能在文档中遗漏的一些信息。
可以使用相关部分中的任何方法(它们都执行相同的操作)按优先级顺序禁用列功能(排序,过滤或解析):
仍然会出现列内容的解析
data-sorter="false"
。class="{ sorter: false }"
。这需要元数据插件。headers : { 0 : { sorter: false } }
。<th>
)类名class="sorter-false"
。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">
禁用解析时,将自动禁用排序和过滤,并将存储在缓存中的列数据设置为空字符串。
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';
}
}