JQueryテーブルソーターがテーブル列の数値を正しくソートできるようにするために何日も努力してきました。
私は両方のスクリプトの現在の最新バージョンを使用しています。
テーブルは正常にレンダリングされますが、数値の並べ替えが正しく機能していません。
数値列を並べ替えると、次の結果が得られます。
8 7 4 32 313など。
あなたが期待する場所:32 318など...
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>
<th width=110 class=\"{sorter: 'digit'}\">Count</th>
これで問題は解決しました。値を数字として処理するようにJavaScriptに指示すると、並べ替えが正しく機能しました。スクリプトで数値が数値としてチェックされていないことは、まだ少しばかげています。しかし、最終的にはもっと高い目的があると思います。
あなたの時間と助けをありがとう
/フォン
うまくいけば、これが誰かがこの投稿を見つけた場合に役立つでしょう。tablesorterで簡単に使用できるようになりました。
$(".table").tablesorter({
headers: {
5: { sorter: 'digit' } // column number, type
}
});
これは他の人には明らかだったかもしれませんが(私にはわかりませんが)、ソリューションを{sorter: 'digit'}メタデータで機能させるには、 jQueryメタデータプラグイン を使用する必要があります。
これは古い質問ですが、まったく同じ問題が発生したため、ここに掲載されている解決策を試す代わりに、まずプラグインのバージョンを確認する必要があります。最新バージョン(2.0.5)を使用していないことがわかったときに、すべての問題が解決されました。
あなたもこれを試すかもしれません:
$(document).ready(function() {
$("table").tablesorter({
// put other options here ...
textExtraction: function(node) {
return parseInt($(node).text());
}
});
});
...これは、テキストのみを抽出した後、ソートされたセルのコンテンツを整数として扱います。
番号を埋める必要があるようです。これが、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より大きい値を使用してください。
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));
};