☆☆ 新着記事 ☆☆

2018年9月11日火曜日

Javascript  配列から表を動的に作成


1. これが分かり易い。
http://proengineer.internous.co.jp/content/columnfeature/8632

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>TEST</title>
</head>
<body>

 <div id="table"></div>
  <script type="text/javascript">
  

// 表の動的作成
function makeTable(data, tableId){
    // 表の作成開始
    var rows=[]; var table = document.createElement("table");

    // 表に2次元配列の要素を格納
    for(i = 0; i < data.length; i++){
        rows.push(table.insertRow(-1));  // 行の追加
        for(j = 0; j < data[0].length; j++){
            cell=rows[i].insertCell(-1);
            cell.appendChild(document.createTextNode(data[i][j]));
            // 背景色の設定
            if(i==0){
                cell.style.backgroundColor = "#bbb"; // ヘッダ行
            }else{
                cell.style.backgroundColor = "#ddd"; // ヘッダ行以外
            }
        }
    }
    // 指定したdiv要素に表を加える
    document.getElementById(tableId).appendChild(table);
}
window.onload = function(){
// 表のデータ
var data = [[11, 12, 13],
            [21, 22, 23],
            [31, 32, 33],
            [41, 42, 43]];

// 表の動的作成
makeTable(data,"table");
};
</script>
</body>
</html>


2. これが理解したいのだが。
https://teratail.com/questions/122504

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <script type="text/javascript" src="underscore.js"></script>
  </head>
  <body>
<!--ここから下がUnderscore.jsを使用した処理-->
    <script>
      var temp_str = "<% var list = [" +
  "{ name: 'ムスカ', tag: ['趣味1','趣味2','趣味3'], desc: ['幼女','射撃','目があああ'] }, " +

  " { name: 'ドーラ', tag: ['趣味1','趣味2','趣味3','趣味4'], desc: ['育児','指揮','度胸','上手そうに食べる'] }," +

  "{ name: '親方', tag: ['趣味1','趣味2','趣味3'], desc: ['シカと','ゲンコツ','シャツ破り'] }," +

  "{ name: 'シータ', tag: ['趣味1','趣味2'], desc: ['掃除','バルス'] }];" + "%>" +
                    "
  <% _.each(list, function(val){ %>" +
  "<h3><%= val.name %></h3>" +
  "<dl>" +

  "<% for(let i = 0; i < val.tag.length; i++){ %>" +
  "<dt><%= val.tag[i] %></dt>" +
  "<dd><%= val.desc[i] %></dd>" +
  "<% } %>" +
   "</dl>" +
 "<% }); %>"; var temp = _.template(temp_str); var html = temp(); document.body.innerHTML = html;

   </script>

<!--ここから下がUnderscore.js無しの処理-->
 <script> const list = [

        { name: 'ムスカ', tag: ['趣味1','趣味2','趣味3'], desc: ['幼女','ロムスカ・パロ・ウル','目があああ'] },
        { name: 'ドーラ', tag: ['趣味1'], desc: ['ハムを食いちぎる'] },
        { name: '親方', tag: ['趣味1','趣味2','趣味3'], desc: ['シカと','ゲンコツ','シャツ破り'] },
        { name: 'シータ', tag: ['趣味1','趣味2','趣味3','趣味4'], desc: ['掃除','バルス','スルー','物探し'] } ]; //HTML内埋め込みとの境界線

      let frag_node = document.createDocumentFragment();
      const p = document.createElement("p");
      const line = document.createTextNode("-------ここから下がUnderscore.js無しの処理-------");      

       p.appendChild(line);
      frag_node.appendChild(p);
     for(let i in list){ //h3 const h3 = document.createElement("h3");
        const name = document.createTextNode(list[i].name); h3.appendChild(name);         
        frag_node.appendChild(h3); //dl
        const dl = document.createElement("dl");

        for(const j in list[i].tag){ //dt const dt = document.createElement("dt");
         const tag = document.createTextNode(list[i].tag[j]);
         dt.className = "tag";
         dt.appendChild(tag); dl.appendChild(dt); //dd
         const dd = document.createElement("dd");
        const desc = document.createTextNode(list[i].desc[j]);
        dd.className = "desc";
        dd.appendChild(desc); dl.appendChild(dd); } frag_node.appendChild(dl);
     }
      document.body.appendChild(frag_node);

    </script>
  </body>
</html>



3. 昔ながらの方法 その1

<td>タグごとに修飾したいんだけで、これでも難しいなぁ!


<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>180913 TEST</title>

</head>
<body>
   <h2>☆車のパーツ名称</h2>
 <table id="001" class="tableCreated"></table>

 <style  type="text/css">
  .table{
   border: 1px solid black;
   color:#fff8dc;
   }

  table td {
   border: 1px solid #5f9ea0;
   background-color: #fffff0;
   padding: 5px 10px;
   color:black;
   }
  </style>
<script type="text/javascript">
 window.onload = function makeTable(carParts, tableId){
  var table = "";

  // 表のデータ
  var carParts = [
   ["ハンドル","Steering Wheel","Don't text while you're behind the wheel!"],
   ["バック・ミラー","rear-view-mirror",""],
   ["アクセル(ブレーキ)ペダル","gas (brake) pedal",""],
   ["バッテリー", "battery"," "],
   ["バッテリーが上がる ","battery ","My battery is dying. (My battery is dead.) "],
   ["シートベルト ","seat belt / buckle "," "],
   ["シートベルトをする ","buckle up ","Buckle up when you're driving. "],
   [" "," "," "],
   [" "," "," "],
   [" "," "," "],
   [" "," "," "],
   ]
 
  alert(carParts.length)
  
 // 表の動的作成
  for(var  i = 0; i < carParts.length; i ++){
   table += "<tr>"
    for(j = 0; j < carParts[0].length; j++){
    table += "<td>" + carParts[i][j] + "</td>" // "+="は、 加算代入演算子 a +=b -> a = a +b
    }
   table += "</tr>"
   }
  //document.write("<table>" + table + "</table>");
 
  document.getElementById("001").innerHTML = table;
 
 }

</script>

</body>
</html>


◆.参考になるなぁ

 JavaScriptでHTMLをダイナミックに書き換える 
http://www.atmarkit.co.jp/ait/articles/0807/02/news144.html


◆. こんなのもあるなぁ。
There are numerous ways to create table using Javascript !!
http://titi-fe.hatenablog.com/entry/2016/02/15/152723
<script>
// tableタグ要素を作成
var table = document.createElement('TABLE');
table.id = 'nametbl';
table.border = '1';
// TBODYタグ要素作成し、TABLEタグ要素に追加
var tbody = document.createElement('TBODY');
table.appendChild(tbody);
// 1行目のTRタグ要素を作成しTBODYタグ要素に追加
var tr1 = document.createElement('TR');
var td1_1 = document.createElement('TD');
td1_1.appendChild(document.createTextNode('性'));
var td1_2 = document.createElement('TD');
td1_2.appendChild(document.createTextNode('名'));
td1_1.className = 'theadercell';
td1_2.className = 'theadercell';
tr1.appendChild(td1_1);
tr1.appendChild(td1_2);
tbody.appendChild(tr1);
// 2行目のTRタグ要素を作成しTBODYタグ要素に追加
var tr2 = document.createElement('TR');
var td2_1 = document.createElement('TD');
td2_1.appendChild(document.createTextNode('山田'));
var td2_2 = document.createElement('TD');
td2_2.appendChild(document.createTextNode('太郎'));
tr2.appendChild(td2_1);
tr2.appendChild(td2_2);
tbody.appendChild(tr2);
// 3行目のTRタグ要素を作成しTBODYタグ要素に追加
var tr3 = document.createElement('TR');
var td3_1 = document.createElement('TD');
td3_1.appendChild(document.createTextNode('佐藤'));
var td3_2 = document.createElement('TD');
td3_2.appendChild(document.createTextNode('花子'));
tr3.appendChild(td3_1);
tr3.appendChild(td3_2);
tbody.appendChild(tr3);
// tableタグ要素をBODYタグに追加
document.body.appendChild(table);
</script>

0 件のコメント:

コメントを投稿