オブジェクトをパラメーターとして受け取り、オブジェクトの構造を使用してネストされた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
などにも子キーを追加したいと思います。
フレームワークやライブラリは、ほんの数行のコードなどでこれを実行できると確信していますが、この特定のプロジェクトでは使用したくないと思います。
あなたの答えも簡単に説明できれば、これがどのように機能するのか、そしてどこが間違っているのかを学ぶのに本当に役立ちます!
ありがとうございました!
注意:エラーメッセージが話している関数の行を変更してマークを付けました。
私はそれを以下から変更しました:
mp.appendChild(obj[i].children);
に:
mp.appendChild(create(obj[i].children));
これは、子オブジェクト内のネストされたキーも作成する必要screen_name
があるためです。子キーがあれば、それらも作成されます。申し訳ありませんが、これを理解していただければ幸いです。
私はいくつかのポインタについてhttp://jsperf.com/create-nested-dom-structureを見ています、これもあなたを助けるかもしれません!