tableソートJS
Tuesday, Aug 15, 2006 - 02:04 +09:00
仕事にて、tableをソートするJavascriptを作ることになったわけですが... たまたま拾ったサンプルがバリバリのDOMだったおかげで、「Javascriptにおけるオブジェクト指向」がちょっとずつ解ってきました。それはともかく。
おっかなびっくり組んでみると、なんだかんだで、とりあえず動きはするんですが... どうにもappendChild()でノードが追加されるというよりは置換されてるっぽい理屈に確信が持てません。「そういうプロパティなんだ」と言われれば、それまでなんですが。
ソースは以下
- HTML
-
<table border="1" width="580" cellspacing="0" > <tbody> <tr> <th onClick="sortRow(this,0);">グループ名</th> <th onClick="sortRow(this,1);">今日</th> <th onClick="sortRow(this,2);">昨日</th> <th onClick="sortRow(this,3);">今週</th> <th onClick="sortRow(this,4);">先週</th> </tr> <tr> <td>100</td> <td>200</td> <td>300</td> <td>400</td> <td>500</td> </tr> <tr> <td>200</td> <td>300</td> <td>400</td> <td>500</td> <td>600</td> </tr> ... </tbody> </table>
- Script
-
var last_sort; function sortRow(th,idx) { // tbodyを特定する var sec = th.parentNode.parentNode; // trを特定する var rows = sec.rows; var N = rows.length - 1; // 配列xを宣言 var x = new Array; // 一時領域を定義 var marker = document.createElement('tbody'); // tdの値を配列xに格納。行番号を揃えた変数を用意する for(var i=0; i<N; ++i) { x[i] = Object(rows[i+1].cells[idx].firstChild.nodeValue); x[i].row = rows[i+1]; } // 配列xをソート x.sort(); // 配列を逆順にする if(last_sort == idx) { x.reverse(); idx = -idx; } // secをmarkerにする sec.parentNode.replaceChild(marker,sec); // secにtrを追加する for(var i=0; i<N; ++i) { sec.appendChild(x[i].row); } // markerをsecにする marker.parentNode.replaceChild(sec,marker); // ソート情報を保存 last_sort = idx; }
今後の課題
- table内をtbodyで満たしている(thead使いたい)
- ソートが甘い(ソート関数ちゃんと作らないと?)
- クリックポイントの体裁(thの上でカーソル変えるとか)
- th[0]だと連続で2回までしかソート変更できない
要するにサンプルコピったは良いけど、イマイチ改造できないと。なんとなく手ごたえはあるんだけど、あと一歩のところで脳がJSモードに入ってないなぁ(汗
cf. Mata's Homepage, JavaScript テーブルソート
posted in Javascript Trackback (0)
Trackback
- このエントリーのトラックバックURL
- http://rospear.info/other/mt-tb.cgi/205