こんにちは。いつもお世話になっております。
状況
- contenteditableでブロックエディタを作成しています。
- 昨日に質問でHTMLをJSONに変換する方法について質問させていただきました。
解決したい内容
- HTMLからJSONに変換する事は出来たのですが,JSONからHTMLに変換できません。
- 下記のようなJSONからHTMLに変換する関数を作成したいです。
json
1{ 2 "type": "DIV", 3 "content": [ 4 { 5 "type": "SPAN", 6 "content": [ 7 "0", 8 { 9 "type": "SPAN", 10 "content": [ 11 "12345" 12 ], 13 "attributes": [ 14 { 15 "key": "data-color", 16 "value": "#f00" 17 }, 18 { 19 "key": "style", 20 "value": "color: rgb(255, 0, 0);" 21 } 22 ] 23 }, 24 "" 25 ], 26 "attributes": [] 27 }, 28 { 29 "type": "SPAN", 30 "content": [ 31 "6789" 32 ] 33 } 34 ], 35 "attributes": [ 36 { 37 "key": "data-key", 38 "value": "0" 39 }, 40 { 41 "key": "data-number", 42 "value": "0" 43 }, 44 { 45 "key": "data-type", 46 "value": "p" 47 }, 48 { 49 "key": "data-level", 50 "value": "0" 51 }, 52 { 53 "key": "data-align", 54 "value": "left" 55 } 56 ] 57}
html
1<div data-key="0" data-number="0" data-type="p" data-level="0"data-align="left"> 2 <span> 3 0 4 <span data-color="#f00" style="color: rgb(255, 0, 0);">12345</span> 5 </span> 6 <span>6789</span> 7</div>
検討した解決方法
- 下記の関数でHTMLへの変換を試みましたが,上記のHTMLのような構造になりませんでした。
- 一つ目のspan内に二つ目のspan(6789)も含まれてしまいます。
JavaScript
1/** 2* 3* @param parent appendする親要素 4* @param object 上記のJSON 5*/ 6function ToHTML(parent,object){ 7 if(object['type']){ 8 child=document.createElement(object['type']); 9 parent.appendChild(child); 10 for(let i=0;i<object['attributes'].length;++i){ 11 child.setAttribute(object['attributes'][i]['key'],object['attributes'][i]['value']); 12 } 13 if(object['content']){ 14 for(let i=0;i<object['content'].length;++i){ 15 if(object['content'][i]['type']){ 16 ToHTML(child,object['content'][i]); 17 }else{ 18 text=document.createTextNode(object['content'][i]); 19 child.appendChild(text); 20 } 21 } 22 } 23 } 24}
自力での解決や検索の仕方が悪いのかネットでも解決策を見つけられなかったのでご指南の程よろしくお願いします。