Сделать HTML-конструктор из деревянной структуры
var someTree = { tagName: "table", //html tag subTags: [ //вложенные тэги { tagName: "tr", subTags: [ { tagName: "td", text: "some text", }, { tagName: "td", text: "some text 2", } ] } ], attrs: { border: 1, }, } Помогите дописать код, нужно с рекурсией, вот мой код: var someTree = { tagName: "table", //html tag subTags: [ //вложенные тэги { tagName: "tr", subTags: [ { tagName: "td", text: "some text", }, { tagName: "td", text: "some text 2", } ] } ], attrs: { border: 1, }, } function walker(node, nestedFieldName, deepness, callback){ callback(node, nestedFieldName, deepness); if (nestedFieldName in node){ for (key in node[nestedFieldName]){ walker(node[nestedFieldName][key], nestedFieldName, deepness +1, callback) } } } var str = ""; walker(someTree, "subTags", 0, function(node, nestedFieldName, deepness){ str += " ".repeat(deepness) + node.tagName + "\n"; }); console.log(str); Должно получиться: <table border=1> <tr> <td>some text</td> <td>some text 2</td> </tr> </table> |
дерево создание элементов
Marson,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <script> var someTree = { tagName: "table", subTags: [{ tagName: "tr", subTags: [{ tagName: "td", text: "some text" }, { tagName: "td", text: "some text 2" }] }], attrs: { border: 1 } }; function createElem(tagName, attrs, text) { var elem = document.createElement(tagName); if (attrs) for (var name in attrs) elem.setAttribute(name, attrs[name]); if (text) elem.textContent = text; return elem } function walker(tree) { var tagName = tree.tagName, attrs = tree.attrs, text = tree.text, elem = createElem(tagName, attrs, text); if (tree.subTags) tree.subTags.forEach(function(el) { el = walker(el); elem.appendChild(el) }); return elem } var table = walker(someTree); document.body.appendChild(table); </script> </body> </html> |
Часовой пояс GMT +3, время: 08:00. |