Node.appendChild(Node)の挙動
いま、
<div id="content"> //ここからjavascriptの描画部分 <img /> <span>testtest</span> //ここまでjavascriptの描画部分 <div>
とする。
function $id(id) { return document.getElementById(id); } var content = $id("content"); var df = document.createdocumentFragment();
で取得して、imgは迷わず、
var img = document.createElement("img"); img.src = "##"; img.alt = "$$"; df.appendChild(img);
で、何の問題もなくOK!!
spanの取得方法が微妙に間違える。
df.appendChild(newNode)の戻り値はnewNode[Object NodeObject]であることに注意。
戻り値を追加されたdf[Object NodeObject]と勘違いしてしまうとこうなる。
var spanDate = document.createElement("span"); var text = document.createTextNode("creature"); var spanText = spanDate.appendChild(text); df.appendChild(Spantext);
これじゃあ、span要素は追加されないのは当然。
三行目のvar spanText = spanDate.appendChild(text);
が間違いで、ここはただのテキストノードです。
var spanDate = document.createElement("span"); var text = document.createTextNode("creature"); spanDate.appendChild(text); df.appendChild(spanDate);
これが正解。だから、3行目と4行目をまとめたりして、
df.appendChild(spanDate.appendChild(text));
とすると、うまくいかないよ。
その2.
window.onload = function() { var div = document.getElementById("content"); var p = document.createElement("p"); var span = document.createElement("span"); var result = p.appendChild(span); div.appendChild(p);
と書くと、
div--p--span
となるが、一行足して、
window.onload = function() {
var div = document.getElementById("content");
var p = document.createElement("p");
var span = document.createElement("span");
var result = p.appendChild(span);
div.appendChild(p);
div.appendChild(result);
}
と書くと、
div---p
∟span
となる。
つまり、resultはspanと全く同じもの(コピーではない)
当然、
span.appendChild(document.createTextNode("second"));
をついかしても、
result.appendChild(document.createTextNode("second"));
をついかしても、
div---p
∟span--#text
と同じように追加される。コピーができるのではないことに注意。