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:

 
Name Count
Name_132
Name_212
Name_311
name_414
Name_57
Name_63
Name_732
Name_831
Name_935

希望这可以帮助某人,如果他们找到这篇文章,在tablesorter你现在可以简单地使用。

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

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

谢谢大家的时间和帮助

/冯斯希

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

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

看起来你需要填写你的号码。 这解释了为什么在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的值。

您也可以尝试这样做:

 $(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)); };