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>
Ответы
Ответ 1
<th width=110 class=\"{sorter: 'digit'}\">Count</th>
Это решило проблему.
Говоря о javascript для обработки значения в виде цифры, правильная работа сортировки.
Все еще бит глупо, что числовые значения не отмечены в script как числа. Но я думаю, что в конечном итоге для этого есть более высокая цель.
Спасибо всем за ваше время и помощь
/Fons
Ответ 2
Надеюсь, это поможет кому-то, если они найдут этот пост, в tablesorter, который вы теперь можете просто использовать.
$(".table").tablesorter({
headers: {
5: { sorter: 'digit' } // column number, type
}
});
Ответ 3
Это могло быть очевидно для других (не для меня), но чтобы получить решение, работающее с метаданными {sorter: 'digit'}, вам нужно использовать плагин метаданных jQuery.
Ответ 4
Я знаю, что это старый вопрос, но я столкнулся с одной и той же проблемой, и вместо того, чтобы попробовать ЛЮБОЕ решение, размещенное здесь, вы должны сначала проверить версию своего плагина. Каждая проблема была решена, когда я узнал, что я не использовал самую новую версию (2.0.5)
Ответ 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, если вам нужно сортировать большие числа.
Ответ 6
Вы также можете попробовать:
$(document).ready(function() {
$("table").tablesorter({
// put other options here ...
textExtraction: function(node) {
return parseInt($(node).text());
}
});
});
... это обрабатывает содержимое отсортированных ячеек как целые числа, после извлечения только текста.
Ответ 7
Вы также можете показать свой 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;
}
});
});
Ответ 8
Найти в 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));
};