jQuery Tablesorter - 排序字母数字列

时间:2011-07-14 12:03:54

标签: jquery tablesorter

我正在尝试对包含字母数字数据的列进行排序,例如

  • sometext1
  • sometext2
  • sometext3
  • sometext10

遗憾的是,Tablesorter没有正确排序,即

  • sometext1
  • sometext10
  • sometext2
  • sometext3

任何帮助都将非常感激。谢谢!

2 个答案:

答案 0 :(得分:3)

解决方案:

    $.tablesorter.addParser({
      id: 'alphanum',
      is: function(s) {
        return false;
      },
      format: function(s) {
        var str = s.replace(/(\d{1,2})/g, function(a){
            return pad(a);
        });

        return str;
      },
      type: 'text'
    });

    function pad(num ){
      var s = '00000' + num;
      return s.substr(s.length-5);
    }    

答案 1 :(得分:2)

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

因此,这个例子向您展示了如何创建自己的排序逻辑。看看函数:

    format: function(s) { 
        // format your data for normalization 
        return s.toLowerCase().replace(/good/,2).replace(/medium/,1).replace(/bad/,0); 
    }, 

您需要编写一个javascript函数来获取字符串“sometext3”的文本和数字部分,然后使用零填充“sometext00000003”格式化数字,这将修复您的排序问题,并且不会更改它在客户端中的显示方式

这是一个基本的例子:

<script>
function normalizeAlphaNumeric(text) {
r = new RegExp("([^\\d]*)(\\d*)");
var match = r.exec(text);
    return match[1] + pad(match[2]);
}

function pad(num) {
    var s = "000000000" + num;
    return s.substr(s.length-8); // i chose 8
}

document.write(normalizeAlphaNumeric("sometext1") + "<br/>");
document.write(normalizeAlphaNumeric("sometext2")+ "<br/>");
document.write(normalizeAlphaNumeric("sometext3")+ "<br/>");
document.write(normalizeAlphaNumeric("sometext10")+ "<br/>");

</script>

这个输出是:

sometext00000001
sometext00000002
sometext00000003
sometext00000010

现在可以排序。