9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JavaScript で可読性を残しつつタグを生成する方法

Last updated at Posted at 2018-06-16

用途

  • テンプレエンジンとかモダンなフレームワークを使わずに、標準の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(...)とかでイベントリスナをつけたりする。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?