table sortingのバグとか直してみた

先日紹介したtable sortingについて、たつをさんよりバグの指摘を受けました。

例えば、 3,10,2 を昇順にしても 2,3,10 にならず、10,2,3 になる。 つまり、「文字列」としてしかソートできない。

中略

ts_resortTable() の中の「var i = 0;」を「var i = 1;」にすれば まともに動くようになるよ。応急処置。
テーブルをソートできるようにするjsライブラリ table sorting をまともに使えるようにする

ほんとですね。動いてないです。

で、ヒントもいただいてるのでソースをながめていると

if (itm.substr(0,4) == "<!--" || itm.length == 0) {

あたりがまともに動かない様子。

if (t.tBodies[0].rows[i].cells[column].tagName == "TH" || t.tBodies[0].rows[i].className == "unsortable" || t.tBodies[0].rows[i].className.indexOf("unsortable") != -1 || itm.length == 0) {

に変更すると製作者の意図どおりに動くのかな。

で読み進めると、日本語の価格には対応してない様子。

107/108行目当たりを

if (itm.match(/^-?\\?(\d+[,\.]?)+円?%?$/)) sortfn = ts_sort_numeric;
if (itm.match(/^-?\\?(\d+[,\.]?)+(\u5186)?%?$/)) sortfn = ts_sort_numeric;

に変更すると『1,000円』とか『\1,500』とかでもちゃんとソートできるようになります。(&yen;には未対応)

サンプル

せっかくなので修正したものをsortable_ja.jsとして公開しておきます。

追伸

TBはスパムが多い時間帯はうまく動かないようです。
安いサーバー(チカッパ!)なので。。。

スポンサードリンク

«テーブルをソートできるようにするjsライブラリ-table sorting | メイン | SBMのrel="nofollow"について考えてみる»