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_1 32 Name_2 12 Name_3 11 name_4 14 Name_5 7 Name_6 3 Name_7 32 Name_8 31 Name_9 35
希望这可以帮助某人,如果他们找到这篇文章,在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)); };