表を操作する

JSONのデータを表にし、変更、書き出す

JSONを表にする

JSONになっている発電機のデータファイルを読み込み、表にする


CODE
HTML

   <h3 class="pointB">JSONを表にする</h3>
   <p>JSONになっている発電機のデータファイルを読み込み、表にする</p>
   <button id="button1" class="ui-button ui-widget ui-corner-all">JSONを表にする</button>
   <br />
   <div id="tablej"></div>
     
Javascript

// 下記を読みこませておく!
function makeTable(idName, data)
{
 var rt = "";
 rt += '   <table id="' + idName + '" class="tableG">' + LF;
 for(var i in data)
 {
  var data1 = data[i];
  //console.table(data1);
  for(var j in data1)
  {
   //console.log("data["+ i + ", " + j + "]=" + data1[j]);
   if(i == 0)
   {
    if(j == 0)
    {
     rt += '    <thead>'+LF;
     rt += '     <tr>'+LF;
    }
    rt += '      <th width="15%">' + data1[j] + '</th>'+LF;

   }
   else
   {
    if(j == 0)
    {
     if(i == 1)
     {
      rt += '     </tr>' + LF;
      rt += '    </thead>' + LF;
      rt += '    <tbody>' + LF;
      rt += '     <tr>' + LF;
     }
     else
     {
      rt += '     </tr>' + LF;
      rt += '     <tr>' + LF;
     }
    }
    rt += '      <td>' + data1[j] + '</td>' + LF;
   }
  }
 }
 rt += '     </tr>' + LF;
 rt += '    </tbody>' + LF;
 rt += '   </table>' + LF;
 return rt;
}

$("#button1").click(function(event)
{
 var fname="json/hatsudenki.json";
 console.log(fname);
 $.getJSON(fname,function(data)
 {
  console.table(data);
  var rt = makeTable("jquery-tablesorter-table2", data)
  console.log(rt);
  $("#tablej").html(rt);
  //listSakusei(data, "#out3");
 });
});

     
CSS


     

上記の表データを変更する

上記の表のセルに入力できるようにする。


CODE
HTML

   <button id="button2" class="ui-button ui-widget ui-corner-all">表に入力できるようにする</button>
   <br />
   <div id="status"></div>
     
Javascript


  $("#button2").click(function(event)
  {
   $("#jquery-tablesorter-table2 > tbody > tr > td").click(edit_toggle());
  });

  function edit_toggle()
  { // 表の値を書き換える処理
   var edit_flag=false;
   return function()
   {
   if(edit_flag) return;
    var row = $(this).closest('tr').index();//theadのtrはカウントされない
    var col = this.cellIndex;
    console.log("row="+row+", col="+col);
  
    var ir = $(this).parent()[0].rowIndex;//theadのtrもカウントされる
    var ic = this.cellIndex;
    console.log("ir=" +ir+", ic="+ic);
  
    var $input = $("<input>").attr("type","text").val($(this).text());
    $(this).html($input); 
  
    $("input", this).focus().blur(function()
    {
     $(this).after($(this).val()).unbind().remove();// var $input = $("<input>").attr("type","text").val($(this).text());
     edit_flag = false;//     $(this).html($input); 
    });
  
   }
  }
     
CSS


     

上記の表に加えられた変更を保存する

上記の表のデータを取得し、JSONのファイルとして保存する。


CODE
HTML

   <h3 class="pointB">上記の表に加えられた変更を保存する</h3>
   <p>上記の表のデータを取得し、JSONのファイルとして保存する。</p>
   <button id="button3" class="ui-button ui-widget ui-corner-all">表のデータを保存する</button>
     
Javascript

  $("#button3").click(function(event)
  {
   //表の値を配列に。配列をJSONに
   var data = [];
   var tr = $("#jquery-tablesorter-table2 tr");//全行を取得
   console.log(tr.length);
   for( var i=0,l=tr.length;i<l;i++ )
   {
    var cells = tr.eq(i).children();//1 行目から順にth、td問わず列を取得
    for( var j=0,m=cells.length;j<m;j++ )
    {
     if( typeof data[i] == "undefined" )
      data[i] = [];
     data[i][j] = cells.eq(j).text();//i行目j列の文字列を取得
     console.log("data["+i+"]["+j+"]="+data[i][j]);
    }
    //配列をJSONに変換
    var json_data = JSON.stringify(data, null, 1);

    console.log(json_data );
    saveData("json","hatsudenki2.json",data);
   }

 });

 function saveData(folder, fileName, data)
 {
  $.post(
        'php/save.php',
        { フォルダ: folder, ファイル : fileName, データ :data },
        function( data, textStatus )
        {
         if(textStatus == 'success')
         {
          $('#status') . text('書き出し成功');
         }
         console.log(data);
        }
        ,'html'
    );
    if( $('#status').text() == '' ) {
        $('#status').text( '書き出し成功' );
    }

 }

// save.php
<?php 
 $folder = $_POST["フォルダ"];
 $fileName = $_POST["ファイル"];
 $data = $_POST["データ"];
 
 $file_name = "../" . $folder."/".$fileName;

 $json = fopen($file_name, 'w+b');
 fwrite($json, json_encode($data, JSON_UNESCAPED_UNICODE));
// JSON_UNESCAPED_UNICODE:マルチバイト文字をJSONにエンコードした場合エスケープされ文字化けに見えるのを避けるため
 fclose($json);
//書き出したjsonを読み込んで返す
 $json2 = file_get_contents($file_name);
 print $json2;

?>

     
CSS


     

書き出したJSONを表にする

上記で書き出したJSONを読み、表を作成する。


CODE
HTML

   <p>上記で書き出したJSONを読み、表を作成する。</p>
   <button id="button4" class="ui-button ui-widget ui-corner-all">書き出したJSONから表を作成する</button>
   <br />
   <div id="tablej2"></div>
     
Javascript

$("#button4").click(function(event)
{
 var fname="json/hatsudenki2.json";
 console.log(fname);
 $.getJSON(fname,function(data)
 {
  console.table(data);
  var rt = makeTable("jquery-tablesorter-table3", data)
  console.log(rt);
  $("#tablej2").html(rt);
  //listSakusei(data, "#out3");
 });

});
     
CSS