10
10

More than 5 years have passed since last update.

jsonをhtmlに変換する関数

Last updated at Posted at 2012-12-26

jsonからdomに簡単に同期させたいということです。なるべくjsonの操作にDOM操作を隠蔽したい。イチイチjson解析してjQueryでdom操作みたいなたんぽぽ刺身なお仕事やってられんですよ。
遅ればせながら再帰とjson,domの相性の良さを確認した。
引数のjsonが持つプロパティはtag,id,class,text(子要素)。
#既存でもうちょっとよさげなやつがあった
#https://github.com/Jxck/html2json

課題

jsonの中の変更にイベントをしかけることはできないのか
それができたらjsonいじるだけでよくなってdomを触らなくてすむ

実行結果

実行結果
>json2dom(testobj)
<ul class="ul_class" id="ul_id">
<li class="li_class" id="no1">list1</li><li class="li_class" id="no2">list2</li><li class="li_class" id="no3">list3</li><li class="li_class" id="no4">list4</li><li class="li_class" id="no5">list5</li><li class="li_class" id="no6">list6</li><li class="li_class" id="no7">list7</li><li class="li_class" id="no8">list8</li><li class="li_class" id="no9">list9</li><li class="li_class" id="no10">list10</li></ul>

本体

json2dom.coffee
json2dom =  (o)->     
  e = if o.tag? then $("<#{o.tag}/>") else $('<div/>')
  if o.class? then e.addClass o.class
  if o.attr? then e.attr o.attr 
  if o.text instanceof Array
    e.append(json2dom(c)) for c in o.text
  else
    e.append(o.text)
  return e
json2dom.js

json2dom = function(o) {
  var c, e, _i, _len, _ref;
  e = o.tag != null ? $("<" + o.tag + "/>") : $('<div/>');
  if (o["class"]) {
    e.addClass(o["class"]);
  }
  if (o.attr != null) {
    e.attr o.attr);
  }
  if (o.text instanceof Array) {
    _ref = o.text;
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      c = _ref[_i];
      e.append(json2dom(c));
    }
  } else {
    e.append(o.text);
  }
  return e;
};

10
10
7

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
10
10