SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【Javascript】removeChild は 削除ではない

問題

親要素.removeChild(子ノード) したら、きれいに消えるんだよねっ♪

答え

DOMツリーから除去されただけで、消えていない。メモリ内に存在する。

MDNのリファレンスなどにはばっちり書いてある。

概要

removeChild はDOMから子ノードを取り除きます。

構文

oldChild = element.removeChild(child)
  • child はDOMから取り除く、子ノードです。
  • element は child の親ノードです。
  • oldChild は 取り除かれた子ノードへの参照を保持します。oldChild と child は等価です。

取り除かれた子ノードはしばらくは記憶領域上に残りますが、もうDOMの一部ではありません。取り除いたノードは、oldChild オブジェクト参照を通じて、コード中で後で再利用することができます。

https://developer.mozilla.org/ja/DOM/element.removeChild
https://developer.mozilla.org/en/DOM/element.removeChild

そのため、以下のコードはIEでもFirefoxでもChromeでも、ちゃんと動作する。

//ある要素の
var parent = document.getElementById('A');
//最初の子要素をremoveChildした → この時点でDOMツリーから除去されて表示からも消える
var child = parent.removeChild(parent.firstChild);
//そのあと
//別な要素に
var otherParent = document.getElementById('B');
//appendすると、再登場!
otherParent.appendChild(child);

デモ

https://www.softel.co.jp/blogs/tech/archives/demo/d20120606

後で参照するつもりがなかったら、removeChildしたノードは消えたものと考えてよいと思いますが、こういうことになっているんですよのメモでした。

関連するメモ

コメント