我一直在努力让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>
答案 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));
};