オブジェクト(JSON)から定義リスト(DL要素)を生成する
array2listを作ったついでにと思ったけど、こっちの方が実用性がありそう。array2listにも少し手を入れて、オブジェクトと配列の入れ子にも対応したので、JSONのdumpもできる。
function object2dl(object, doc) { if (!doc) doc = document; var dl, dt, dd, val; dl = doc.createElement('dl'); for (key in object) if (object.hasOwnProperty(key)) { val = object[key]; dt = dl.appendChild(doc.createElement('dt')); dt.appendChild(doc.createTextNode(key)); dd = dl.appendChild(doc.createElement('dd')); if (Object.prototype.toString.call(val) === '[object Array]') { dd.appendChild(array2list(val, false, doc)); } else if (typeof val === 'object') { dd.appendChild(object2dl(val, doc)); } else { dd.appendChild(doc.createTextNode(val)); } } return dl; } function array2list(array, ordered, doc) { if (!doc) doc = document; var list = doc.createElement(ordered ? 'ol' : 'ul'), li; for (var i = 0; i < array.length; ++i) { var item = array[i]; if (Object.prototype.toString.call(item) === '[object Array]') { if (!li) li = list.appendChild(doc.createElement('li')); li.appendChild(array2list(item, ordered, doc)); } else { li = list.appendChild(doc.createElement('li')); if (typeof item === 'object') { li.appendChild(object2dl(item, doc)); } else { li.appendChild(doc.createTextNode(String(item))); } } } return list; }