我有一个将对象作为参数的函数,并使用对象的结构来创建嵌套的 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
等等。
任何 hel 将不胜感激,但请:我确信框架或库可以在几行代码或类似的代码中为我完成此操作,但我不希望在这个特定项目中使用一个。
如果您也可以简要解释您的答案,那真的会帮助我了解这一切是如何运作的,以及我哪里出错了!
谢谢!
注意:我已经更改并标记了我的函数中错误消息所涉及的行。
我将其更改为:
mp.appendChild(obj[i].children);
至:
mp.appendChild(create(obj[i].children));
这是因为我希望子对象中的任何嵌套键也被创建,所以screen_name
如果有一个子键,它们也会被创建。对不起,我希望你能明白这一点!
我正在查看http://jsperf.com/create-nested-dom-structure以获取一些指针,这也可能对您有所帮助!