Ответ 1
Я понял это. В рамках функции, если вы не используете ключевое слово var при создании новых переменных, Javascript предоставит переменным глобальную область. Когда я пытался рекурсивно генерировать новые теги, он перезаписывал родительский тег. Ошибка возникает из-за того, что я пытался добавить элемент к себе. Ниже приведена рабочая версия.
function $(tagName) {
return document.createElement(tagName);
}
//returns an html element representing data
//data should be an array or some sort of value
function tagMaker(data) {
var tag = null;
if(data instanceof Array) {
//data is an array, represent using <ol>
tag = $("ol");
for(var i=0; i<data.length; i++) {
//construct one <li> for each item in the array
var listItem = $("li");
//get the html element representing this particular item in the array
var child = tagMaker(data[i]);
//<li>*html for child*</li>
listItem.appendChild(child);
//add this item to the list
tag.appendChild(listItem);
}
} else {
//data is not an array, represent using <b>data</b>
tag = $("b");
tag.innerHTML = data.toString();
}
return tag;
}