У меня есть функция, которая принимает объект в качестве параметра и использует структуру объекта для создания вложенных узлов DOM, но я получаю следующую ошибку:
http://new.app/:75NOT_FOUND_ERR: DOM Exception 8: An attempt was made to reference a Node in a context where it does not exist.
То, что я хотел бы, чтобы моя функция выполняла, - это когда в качестве параметра указывается подходящий объект, например:
var nodes = {
tweet: {
children: {
screen_name: {
tag: "h2"
},
text: {
tag: "p"
}
},
tag: "article"
}
};
Это создаст следующие DOM-узлы:
<article>
<h2></h2>
<p></p>
</article>
Вот моя попытка:
function create(obj) {
for(i in obj){
var tmp = document.createElement(obj[i].tag);
if(obj[i].children) {
tmp.appendChild(create(obj[i].children)); /* error */
};
document.getElementById("tweets").appendChild(tmp);
};
};
Я уже борюсь!
В идеале я бы хотел со временем добавить больше дочерних ключей к каждому объекту, не только tag
, но также id, innerHTML, class
и т. Д.
Любой хел был бы очень признателен, хотя, пожалуйста: я уверен, что фреймворк или библиотека могли бы сделать это для меня всего за несколько строк кода или что-то подобное, но I ' я предпочитаю не использовать один для этого конкретного проекта.
Если бы вы тоже могли кратко объяснить свои ответы, это действительно помогло бы мне узнать, как все это работает, и где я ошибся!
Спасибо!
NB. Я изменил и пометил строку в своей функции, о которой говорится в сообщении об ошибке.
Я изменил его с:
mp.appendChild(obj[i].children);
до:
mp.appendChild(create(obj[i].children));
Это потому, что я хочу, чтобы любые вложенные ключи в дочернем объекте также создавались, поэтому screen_name
имел дочерний ключ, они тоже были бы созданы. Извините , надеюсь, вы понимаете это!
Я смотрю на http://jsperf.com/create-nested-dom-structure для некоторых указателей, это может вам тоже помочь!