用途
- テンプレエンジンとかモダンなフレームワークを使わずに、標準のDOM APIだけでタグを生成したい場合。
 
実装
準備
- 以下のような関数を定義
 
var createElement = function(tag, attr = null, ext = null){
    var element = document.createElement(tag);
    if(attr !== null){ 
        Object.keys(attr).forEach(function(e){
            element.setAttribute(e, attr[e]);
        });
    }
    if(ext !== null) ext(element);
    return element;
}
生成例
シンプルな構成
- id と class を指定した単純なdiv要素
 
var foo = createElement('div', {id: 'foo', class: 'foo'}, null);
↓
<div id="foo" class="foo"></div>
ネストさせる
var bar = createElement('div', null, function(div){
    div.appendChild(createElement('p', {id: 'bar'}));
});
↓
<div><p id="bar"></p></div>
テーブルとか
var baz = createElement('table', {style: 'border: 1'}, function(table){
    for(var i=1; i<10; i++){
        table.appendChild(createElement('tr', null, function(tr){
            for(var j=1; j<10; j++){
                tr.appendChild(createElement('td', null, function(td){
                    td.appendChild(document.createTextNode(i*j));
                }));
            }
        }));
    }
});
↓
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 
| 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 
| 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 
| 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 
| 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 
| 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 
| 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 
| 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 
| 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 
関数の説明
createElement(a, b, c)
a: タグ名 String ex. 'div'
b: 属性 Object ex. {id: 'foo', class: 'bar'}
c: 拡張 function(tag) このtag は生成されるHTMLElementなので
tag.appendChild(...) でネストしたり、 tag.addEventListener(...)とかでイベントリスナをつけたりする。