在addParser中具有动态格式函数的TableSorter

TableSorter with dynamic format function in addParser

本文关键字:格式 函数 TableSorter 动态 addParser      更新时间:2023-09-26

我在包含字符串的列上使用TableSorter:

$.tablesorter.addParser(
    {
        id: 'positions',
        is: function(s) {
                return false;
            },
        format: function(s) {
                var abbr=s.replace(/[^a-zA-Z0-9]/g, '').slice(_sortpos);
                return abbr;
            },
        type: 'numeric'
    }
);

format函数应返回一个依赖于全局_sortpos变量的值。此值会动态更改。线路:

var abbr=s.replace(/[^a-zA-Z0-9]/g, '').slice(_sortpos);

去掉所有非数字和非字母,然后删除一定数量的初始字符。目的是按照_sortpos-th字符进行排序。

似乎发生的情况是,当解析器被添加到表分类器时,每个字符串只解析一次格式化函数。然而,出于我的目的,每次排序时都必须重新运行格式化函数。

到目前为止,我已经尝试在每次排序时添加解析器,但没有成功。我还试图通过重新运行我的初始化来重新初始化表分类器

$(".tablesorter").tablesorter(
    {
        sortReset: true,
        headers: {
            1: {
                sorter: 'positions'
            }
        }
    }   
); 

但无济于事。

我能做什么?还有:有没有一个比较器函数可以用来偷偷输入全局参数?然后,我可以在解析器中格式化字符串,然后在比较器中的slice()-函数中动态使用_sortpos。

我自己找到了一个答案:

$(document).ready(function() {  
    $(".tablesorter").tablesorter(
        {
            textSorter: function(a, b, table, column){                  
                if (column==1)
                {
                    var c=parseInt(a.replace(/[^a-zA-Z0-9]/g, '').slice(_sortpos));
                    var d=parseInt(b.replace(/[^a-zA-Z0-9]/g, '').slice(_sortpos));                 
                    return ((c < d) ? -1 : ((c > d) ? 1 : 0));
                }
                return a.localeCompare(b);              
            }           
        }
    );  
});

它不使用解析器,只使用自定义排序器对列==1进行排序。