var someTree = { tagName: "table", //html tag subTags: [ //вложенные тэги { tagName: "tr", subTags: [ { tagName: "td", attrs: { style: "'color: #000'" }, text: "some text", }, { tagName: "td", text: "some text 2", } ] }, ], attrs: { border: 1, style: "'border: 1px solid #ccc'", cellspacing: 0 }, } var str = ""; str += "<" + someTree.tagName + ' '; for (var i = 0; i < Object.keys(someTree.attrs).length; i++) { str += Object.keys(someTree.attrs)[i] + '=' + someTree.attrs[Object.keys(someTree.attrs)[i]] + " "; } str += ">"; for (var i = 0; i < someTree.subTags.length; i++) { // вывожу внутренние теги str += "<" + someTree.subTags[i].tagName + ' '; if(someTree.subTags[i].attrs){ // если у тега нет атрибутов то цикл не исполняется for (var j = 0; j < Object.keys(someTree.subTags[i].attrs).length; j++) { str += Object.keys(someTree.subTags[i].attrs)[j] + '=' + someTree.subTags[i].attrs[Object.keys(someTree.subTags[i].attrs)[j]] + " "; } } str += ">"; if(someTree.subTags[i].text) str += someTree.subTags[i].text; for (var k = 0; k < someTree.subTags[i].subTags.length; k++) { str += "<" + someTree.subTags[i].subTags[k].tagName + ' '; if(someTree.subTags[i].subTags[k].attrs){ // если у тега нет атрибутов то цикл не исполняется for (var j = 0; j < Object.keys(someTree.subTags[i].subTags[k].attrs).length; j++) { str += Object.keys(someTree.subTags[i].subTags[k].attrs)[j] + '=' + someTree.subTags[i].subTags[k].attrs[Object.keys(someTree.subTags[i].subTags[k].attrs)[j]] + " "; } } str += ">"; if(someTree.subTags[i].subTags[k].text) str += someTree.subTags[i].subTags[k].text; str += "'; } str += ""; } str += ""; document.write(str);