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;
};