我一直在尝试了几天,现在得到的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>
有帮助吗?

解决方案 2

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

这解决了这个问题。 告诉JavaScript来处理值作为一个数字做出的排序工作是正确的。 不过有点傻,这个数字的值不会在脚本检查为数字。但我想存在对在端部的更高的目的。

感谢所有为您的时间和帮助

/冯斯希

其他提示

希望这会帮助别人,如果他们发现这个帖子,在你的tablesorter现在可以简单地使用。

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

这可能是明显的给他人(不是我),但要获得解决方案与{分拣机:“数字”}工作的元数据,你需要使用的 jQuery的元数据插件

我知道这是一个老问题,但我遇到了同样的问题,而不是试图在这里发布任何解决方案来了,你应该首先检查你的插件的版本。每一个问题得到解决,当我发现我不是使用最新的版本(2.0.5)

它看起来像你需要垫你的号码。这就解释了为什么8,7,和4 32之前排序,和31。

尝试这种情况:

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比使用更高的价值,如果你需要更大的数字进行排序。

您可以试试这个还有:

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

...这对待排序细胞的含量为整数,刚刚提取后的文本。

您可以显示你的HTML呢?的tablesorter应该检测和处理数字排序没有任何特殊的选项。有没有可能是你的数值是由HTML包围?在这种情况下,你可能需要一个自定义的方法,从提取值的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; 
        } 
    }); 
});

查找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));
};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top