jQuery tablesorter没有正确排序数字

时间:2009-09-22 12:12:07

标签: jquery tablesorter

我一直在努力让jQuery tablesorter在我的表格列中正确排序数字。

我正在使用这两个脚本的当前最新版本。

表格很好,但排序数字不正常。

当我对数字列进行排序时,它会给我以下结果:

8 7 4 32 31 3 等。

你期望的地方: 32 31 8 等...

我读了一些关于添加额外的javascript代码的评论,但我找不到任何好的javascript示例。

我现在使用的jQuery如下:

$(document).ready(function()
    {
      $("#table1")
       .tablesorter(
          {
            sortList: [[0,0]],
            widthFixed: true,
            widgets: ['zebra']
          } )
    }
);

这是我的HTML:

<table id="table1" class=tablesorter>
    <thead>
        <tr>
            <th width=65>Name</th>
            <th width=40>Count</th>
        </tr>
     </thead>
     <tbody>
         <tr><td>Name_1</td><td>32</td></tr>
         <tr><td>Name_2</td><td>12</td></tr>
         <tr><td>Name_3</td><td>11</td></tr>
         <tr><td>name_4</td><td>14</td></tr>
         <tr><td>Name_5</td><td>7</td></tr>
         <tr><td>Name_6</td><td>3</td></tr>
         <tr><td>Name_7</td><td>32</td></tr>
         <tr><td>Name_8</td><td>31</td></tr>
         <tr><td>Name_9</td><td>35</td></tr>
      </tbody>
</table>

8 个答案:

答案 0 :(得分:28)

希望如果他们找到这篇文章,这将有助于他们,在tablesorter中你现在可以简单地使用。

$(".table").tablesorter({
     headers: {
         5: { sorter: 'digit' } // column number, type
     }
 });

答案 1 :(得分:25)

<th width=110 class=\"{sorter: 'digit'}\">Count</th>

这解决了这个问题。 告诉javascript将值作为数字处理,使得排序工作正确。 仍然有点傻,在脚本中没有检查数字值是数字。但我想最终有更高的目的。

感谢您的所有时间和帮助

/冯斯希

答案 2 :(得分:5)

对于其他人(不是我)来说,这可能是显而易见的,但是为了使解决方案能够使用jQuery metadata plugin所需的{sorter:'digit'}元数据。

答案 3 :(得分:3)

我知道这是一个老问题,但我遇到了同样的问题,而不是尝试在此处发布任何解决方案,您应首先检查插件的版本。当我发现我没有使用最新版本(2.0.5)

时,每个问题都解决了

答案 4 :(得分:2)

看起来你需要填写你的号码。这解释了为什么在32和31之前订购了8,7和4。

试试这个:

function padLeft(s,len,c){
  c=c || '0';
  while(s.length< len) s= c+s;
  return s;
}

$("table").tablesorter({
  textExtraction: function(node) {         
    return padLeft(node.innerHTML,2);
  } 
});

如果您需要对更大的数字进行排序,请使用高于2的值。

答案 5 :(得分:2)

你也可以试试这个:

$(document).ready(function() { 
    $("table").tablesorter({ 
        // put other options here ...
        textExtraction: function(node) {  
            return parseInt($(node).text()); 
        } 
    }); 
});

...在仅提取文本后,它将排序的单元格内容视为整数。

答案 6 :(得分:0)

你能展示你的HTML吗? Tablesorter应该在没有任何特殊选项的情况下检测和处理数字排序。您的数值是否可能被html包围?在这种情况下,您可能需要custom method to extract来自html的值。

引用链接的示例:

$(document).ready(function() { 

    // call the tablesorter plugin 
    $("table").tablesorter({ 
        // define a custom text extraction function 
        textExtraction: function(node) { 
            // extract data from markup and return it  
            return node.childNodes[0].childNodes[0].innerHTML; 
        } 
    }); 
});

答案 7 :(得分:0)

在jquery.tablesorter.js代码中查找:

this.isDigit = function(s,config) {

    var DECIMAL = '\\' + config.decimal;
    var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';

    return RegExp(exp).test($.trim(s));
};

并将其替换为:

this.isDigit = function(s,config) {

    var DECIMAL = '\\' + config.decimal;
    var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';

    //return RegExp(exp).test($.trim(s));
    return !isNaN(parseFloat($.trim(s))) && isFinite($.trim(s));
};