jquery Tablesorter - 自然排序顺序?

时间:2011-06-22 20:24:52

标签: javascript jquery tablesorter

我查看了为tablesorter列出的所有答案,但无法找到我正在寻找的内容。

我有一个表,我正在尝试排序,一列包含产品型号,包括字母和数字,问题是它按字母顺序排序,但不按正确顺序排列。例如,排序列如下所示:

STRB 18, STRB 19, STRB 2, STRB 20, STRB 23 - 你明白了。

我已经收集到我需要这个列按自然顺序排序,但是我没有任何js chops来做这个。如果有人能指出我正确的方向,我将非常感激!

3 个答案:

答案 0 :(得分:3)

取自我的一些旧代码

compare = {
    natural: function(a, b) {
        function prepare(s) {
            var q = [];
            s.replace(/(\D)|(\d+)/g, function($0, $1, $2) {
                q.push($1 ? 1 : 2);
                q.push($1 ? $1.charCodeAt(0) : Number($2) + 1)
            });
            q.push(0);
            return q;
        }
        var aa = prepare(a), bb = prepare(b), i = 0;
        do {
            if(aa[i] != bb[i])
                return aa[i] - bb[i];
        } while(aa[i++] > 0);
        return 0;
    }
}

使用示例

test = ['img100b', 'img21', 'img18', 'img100a', 'img1', 'img2']
console.log(test.sort(compare.natural))

答案 1 :(得分:3)

jquery tablesorter插件提供编写自己的解析器的能力。

查看示例并试一试!

http://tablesorter.com/docs/example-parsers.html

答案 2 :(得分:-2)

不确定“natrual”命令的含义,但我猜你的意思是strb 2将在strb 18之前。

您上面的顺序对于字符串是正确的。如果你想按数字部分排序(假设所有的strb总是相同的)你将不得不做一个子字符串来获取数字,然后对数据进行排序。

我也不会在javascript中这样做。让您的数据库为您工作,让它处理数据的顺序。它会为你节省很多痛苦。