Javascript関連情報

更新日:2005年06月28日

Ajax 動的なテーブル書き換え

配列データを、サーバーへ別ファイルとして用意し、ページ構築後の好きなタイミングでAjaxで動的に読み込んでから、テーブル(table)へ流し込んでみます。


動的なテーブル書き換え



  • 3: [ソース] テーブル出力処理用ライブラリ


    この.jsライブラリは、中身には特に触らなくても、そのままコピーしファイルにするだけで使えます。

    【テーブル出力処理用ライブラリ】jslb_writetable.js
    //====================================================================
    // テーブル処理用ライブラリ jslb_writetable.js
    //
    // 最新情報 http://jsgt.org/mt/archives/01/000414.html 
    // 上記コメント削除不可。商用利用、改造、自由。連絡不要です。
    // 
    
    ////
    // テーブルを書き出します
    // @param  tableId       対象テーブルを書き出すDIVのID名
    // @param  dataAry       データ 二次元配列で渡します
    // @sample               writeTable('tdiv',[['名前','data'],['山田','12']])
    //
    function writeTable(tableId,dataAry)
    {
    	//引数があれば下記を実行
    	if(!!writeTable.arguments[0]){
    		removeTable(tableId)       ; //テーブル削除
    		mkTable(tableId,dataAry)   ; //テーブル生成
    		mkGraph(tableId)           ; //グラフ生成
    	}
    }
    
    ////
    // テーブルをソートして書き出します
    // @param  tableId       対象テーブルを書き出すDIVのID名
    // @param  dataAry       データ
    // @param  sortFunc      数値ソート関数名 昇順sortA|降順sortD
    // @sample               reWriteTable('tdiv',[['名前','data'],['a',8],['b',3]],sortD)
    //
    function reWriteTable(tableId,dataAry,sortFunc)
    {
    	sortwk(dataAry,sortFunc)
    	writeTable(tableId,dataAry)
    }
    
    
    ////
    // 対象テーブル削除
    // @param  tableId       対象テーブルを書き出すDIVのID名
    //
    function removeTable(tableId){
    	document.getElementById(tableId).innerHTML=''
    }
    
    ////
    // グラフ追加
    // @param  tableId       対象テーブルを書き出すDIVのID名
    //
    function mkGraph(tableId)
    {
    	var i,td,img                                  ; // ローカル変数
    	var mydoc	= document                        ; // documentオブジェクト
    	var table	= mydoc.getElementById(tableId)   ; // 対象テーブル
    	var trs		= table.getElementsByTagName('TR'); // 対象テーブル下のTR配列
    
    	// TRを1行ずつ処理
    	for( i = 1 ; i < trs.length ; i++)
    	{
    		//グラフ用データを前のセルから取得
    		forGraphData = trs.item(i).childNodes.item(1).firstChild.nodeValue
    		//TDと画像を生成
    		td	 = mydoc.createElement("TD")
    		img	= mydoc.createElement("IMG")
    		img.setAttribute('src','./bar1.gif')
    		img.setAttribute('height', 20 )
    		img.setAttribute('width', forGraphData )
    		//グラフ用TDと画像を挿入
    		trs.item(i).insertBefore(td, null).insertBefore(img, null)
    	}
    
    }
    
    ////
    // テーブル生成
    // @param  tableId       対象テーブルを書き出すDIVのID名
    // @param  dataAry     データ
    //
    function mkTable(tableId,dataAry) 
    {
    	if(!dataAry)return 
    	var table, tbody, tr, td, text, i ,j          ; // ローカル変数
    	var row = dataAry.length                    ; // テーブルデータ行数
    	var col = dataAry[0].length                 ; // テーブルデータ列数
    	var mydoc = document                          ; // documentオブジェクト
    
    	//tableとtbody要素を生成
    	table = mydoc.createElement("TABLE")
    	tbody = mydoc.createElement("TBODY")
    
    	//tableへtbody要素を挿入しさらに出力用DIVへ挿入
    	table.insertBefore(tbody, null)
    	document.getElementById(tableId).insertBefore(table, null)
    
    	//行の処理
    	for (i=0; i<row; i++) {
    		tr	 = mydoc.createElement("TR")
    		tbody.insertBefore(tr, null)
    
    		//列の処理
    		for (j=0; j<col; j++) {
    			td	 = mydoc.createElement("TD")
    			text = mydoc.createTextNode(dataAry[i][j])
    			tr.insertBefore(td, null)
    			td.insertBefore(text, null)
    
    			//見出しセル(1列目と1行目)に関するCSS用class名を設定
    			var className=(typeof ScriptEngine=='function')?'className':'class';
    			// 1列目
    			if(j==0)td.setAttribute(className,'col0')
    			// 2列目 (成績)
    			if(j==1)td.setAttribute(className,'col1')
    			// 1行目
    			if(i==0)td.setAttribute(className,'row0')
    		}
    	}
    
    	return table
    }
    
    //====================================================================
    // 並べ替え
    //
    
    ////
    // 並べ替え
    // @param  dataAry       並べ替え対象配列
    // @param  sortFunc      数値ソート関数名 昇順sortA|降順sortD
    //
    function sortwk(dataAry,sortFunc)
    {
    	if(!dataAry)return 
    	var head = dataAry[0] ;
    	dataAry.shift()
    	dataAry.sort(sortFunc)
    	dataAry.unshift(head)
    	return dataAry
    }
    
    //数値ソート昇順
    function sortA(a,b){ return a[1] - b[1] }
    //数値ソート降順
    function sortD(a,b){ return b[1] - a[1] }
    


    • 印刷する
    • ブックマークする
    • 携帯に送る
    • ブログに書く

    あわせて読みたい

    この記事の担当ガイド

    写真

    高橋 登史朗

    Javascriptをはじめ、Ajax、jQueryの著書多数のガイドが、何かと最近騒がれているJa…

    続きを読む

    住まいには、人の個性がよく現れるもの。同じ空間をどのように使うかで、雰囲気も、快適さも大きく変わってくる。ここでは、「建築家と家を建てる」ガイド の川畑博哉氏が厳選した10軒を紹介し、建築家それぞれのこだわりのポイントを紹介しよう。建築のプロたちが考え出した、マネしたくなるアイデアが満載! さぁ、いますぐチェック!

    人気Javascriptランキング

    Powered by 価格.com

    デジタル関連コミュニティ

    北欧好きが、愛用の北欧モノを見せ合うコミュニティ

    メルマガ登録

    【デジタルメルマガ】オトナのオトコなら知っておきたい、PCやデジモノに関する情報をお届けします。

    ショッピングカタログ

    All About ウェブマガジン

    女性向け

    雨が楽しくなる!レイングッズ15

    男性向け

    マネしたくなるアイデア住宅

    All About モバイル

    QRコード

    All Aboutがケータイで読める!

    オススメ記事をメールでチェック

    知識・経験を生かして、記事を書いてみませんか?