読者です 読者をやめる 読者になる 読者になる

しつこくテーブルのソート

今回は前回書いたソートのコードですが、本に載ってたコードにちょこちょこと書き足しただけなので著作権って大丈夫なのかなぁ? 一応サンプル集だったのでたぶん大丈夫かな?


<script type="text/javascript">
<!--
var cell = new Array();
var row = new Array();
var i, n_rows;

// ページのロード時に呼び出される関数initをセット

window.onload = init;

// ページのロード時に呼び出される関数
function init(){
  // tr要素
  var tr = document.getElementsByTagName('tr');
  // 見出し行を除く行の数
  n_rows = tr.length-1;
  // 見出し行を除くテーブルの行を配列rowに代入
  for( i=0; i<n_rows; i++ ){
    row[i] = tr[i+1];
  }
}
// col→列の番号、asc→昇順:true 降順:false
function sortTable(col, asc){
	if(col == 0){
		  
		  // ソート対象の列を配列cellに代入
		  for( i=0; i<n_rows; i++ ){
		    num = row[i].childNodes[col].firstChild.nodeValue;
		  	cell[i] = parseInt(num, 10);
		  
		  }
	}else{
	  // ソート対象の列を配列cellに代入
	  for( i=0; i<n_rows; i++ ){
	    cell[i] = row[i].childNodes[col].firstChild.nodeValue;
	  }
	}  
  // 配列cellの順に配列rowをソート
  sortData(asc);
  // テーブルの書き換え
  replaceTable();
  SetStyle();
}
// 配列cellの順に配列rowをソート
function sortData(asc){
  var tmp;
  var finish_sort = false;// 交換をしなければソート終了
  while(!finish_sort){
    finish_sort = true;
    for( i=0; i<n_rows-1; i++ ){
      if( (asc && cell[i]>cell[i+1]) ||     // 昇順
          (!asc && cell[i]<cell[i+1])  ){   // 降順
        // cellの交換
        tmp = cell[i]; cell[i] = cell[i+1]; cell[i+1] = tmp;
        // rowの交換
        tmp = row[i]; row[i] = row[i+1]; row[i+1] = tmp;
        // 交換をしたのでソート終了ではない
        finish_sort = false;
      }
    }
  }
}
// テーブルの書き換え
function replaceTable(){
  // tbody要素
  var tbdy = document.getElementById('tbdy');
  // tbody要素の行を削除
  for( i=0; i<n_rows; i++ ){
    tbdy.removeChild(row[i]);
  }
  // tbody要素の行を追加
  for( i=0; i<n_rows; i++ ){
    tbdy.appendChild(row[i]);
  }
}
function SetStyle(){
	var TRS = document.getElementsByTagName("tr");
	
	for(i=1; i<TRS.length; i++){
		var number = i;
		if(number%2 == 1){
			//listN = 0;
			TRS[i].className = "list0";
		}else{
			//listN = 1;
			TRS[i].className = "list1";
		}
	}
}	

// -->

サンプルHTMLを付ければいいのですが、
今日はちょっと眠いのでJavaScript部分のみです。