Я пытаюсь написать функцию, которая рекурсивно добавляет детей в DOM на основе объекта JSON.
Проблема, с которой я сталкиваюсь, заключается в том, что последний return
в моей рекурсии "перекрывает" все остальные результаты, и я не совсем уверен, почему.
Это мой код:
var tags = [{
tag: 'div',
props: [{
'class': 'meetup-container'
}],
children: [{
tag: 'div',
props: [{
class: 'meetup',
itemscope: '',
itemtype: 'http://schema.org/Event'
}],
children: [{
tag: 'p',
props: [{
itemprop: 'event'
}]
}],
}]
}, {
tag: 'a',
props: [{
href: '#'
}]
}]
function buildDom(graph) {
let element;
graph.forEach((node) => {
element = document.createElement(node.tag);
if (node.props && node.props.constructor === Array) {
node.props.forEach((prop) => {
let propNames = Object.keys(prop);
propNames.forEach((propName) => {
return element.setAttribute(propName, prop[propName]);
});
});
}
if (node.children) {
element.appendChild(buildDom(node.children));
// return element.appendChild(buildDom(node.children));
}
});
return element;
}
let elements = buildDom(tags);
В основном результат, который я ожидаю увидеть, таков:
<div class="meetup-container">
<div class="meetup">
<p itemprop="event"></p>
</div>
</div>
Но я вижу вот что:
<p itemprop="event"></p>
Однако, если я console.log
проверяю каждый шаг своей функции, я вижу, как моя функция правильно проходит по дочерним элементам, проблема в том, что они не добавляются к ним так, как они должны идти.