jqueryでエクセル風の入力画面を作る

すごい簡単なんだけど、必要だったのでデモつくってみた
とりあえずできることは...たいしてないのだけど


矢印キーで移動できるくらいなんだけど、管理画面とかからいちいちマウスでフォーカスあてて更新とかが手間とのことなので
これをカスタマイズしていけたらなぁと


いろいろライブラリあるけど、業務とかで実用化するとなるとカスタマイズしてゴリゴリコード書いていく事になるのかと思ってとりあえず作ってみた形です

http://www25.atpages.jp/~kimagureneet/example/table/
↑デモページ

<!DOCTYPE html>
<head>
  <title></title>
  <meta charset="UTF-8">
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="./jquery.table.js"></script>
  <link rel="stylesheet" href="./jquery.table.css">
</head>
<body>
<script>
$(function(){
    $("#table").table(
    {
        header : ["NO","氏名","国語","算数","理科","社会"],
        data : [[1,"山田太郎",80,82,84,86,88],
                  [2,"鈴木次郎",80,82,84,86,88]]
    });
});
</script>
  <h2>test</h2>
  <div id="table"></div>
</body>
</html>
//jquery.table.js
//params int rows 行数
//params array header 表ヘッダー
//params array data 初期データ
$(function(){

    $.fn.table = function(options){
	
	var opts = $.extend({},$.fn.table.defaults,options);
	var table = $("<table>");
	var tr = $("<tr>");
	$.each(opts.header,function(){
	    tr.append("<th>"+this+"</th>");
	});
	table.append($("<thead>").append(tr));

	var tbody = $("<tbody>");
	for(var y=0;y<opts.rows;y++){
	    var tr = $("<tr>");
	    for(var x=0;x<opts.header.length;x++){
		tbody.append(tr.append($("<td>").append(
		    $("<input type=\"text\" id=\"" + x + "-" + y + "\">")))
		);
	    }
	}
	table.append(tbody);
	$(this).append(table);

	$.each(opts.data,function(y,v){
	    $.each(v,function(x,v2){
		$("#" + x + "-" + y).val(v2);
	    });
	});
	var fx=0;fy=0;
	$("#"+fx+"-"+fy).focus();
	
	$(this).keydown(function(e){
	    if(e.keyCode == 37) fx--;
	    else if(e.keyCode == 38) fy--;
	    else if(e.keyCode == 39) fx++;
	    else if(e.keyCode == 40) fy++;
	    else return;

	    if(fx<0) fx=0;
	    if(fy<0) fy=0;
	    if(fx>opts.header.length-1) fx=opts.header.length-1;
	    if(fy>opts.rows-1) fy=opts.rows-1;
	    
	    $("#"+fx+"-"+fy).focus();
	});
    }

    $.fn.table.defaults = {
	rows : 10
    };
    
});  
//jquery.table.css
//デザインはこれをカスタマイズしてください!
table tbody tr td input{
    margin:0;
    padding:0;
    width:100%;
    height:100%;
    border:none;
    font-size:100%;
}
table tbody tr td input:focus{
    background-color: #E6E6FA;
}
table
,table thead tr th
,table tbody tr td{
    border:1px #999 solid;
}
table{
    border-collapse:collapse;
}