【JavaScript】 DOM:要素の複製 cloneNode

2007.05.07 Author: たわばがに

ということで、今回はJavaScriptのDOMスクリプティングネタです。

以前、さらりと appendChildremoveChild に関しては取り上げた気がするので、
今回は要素の複製に使う cloneNode について書いてみました。

まずは毎度おなじみということで、以下のようなサンプルを作ってみました。
<script type="text/javascript">
<!--
var count = 0;
function hoge() {
    // クローン生成
    tpl   = document.getElementById('template01');
    clone = tpl.cloneNode(true);
    // idとdisplayの設定
    clone.id            = "dispData_" + count;
    clone.style.display = "inline";
    // 表示
    base = document.getElementById('display_area')
    base.appendChild(clone);
    // カウンタアップ
    count++;
}
//-->
</script>
<div id="template01" style="display:none;">
<img src="http://shain.blog.conextivo.com/images/js/human_b.gif">
</div>
<div id="display_area"></div>
<input type="button" value="画像を複製して表示" onClick="hoge()">

これを実際にセットしてみました。
↓のボタンをクリックすると、画像(正確には、divとimg)が複製され、表示されます。
クリックする度に画像が一つづつ増えていきます。



以下、スクリプトの説明。

cloneNode で id が template01 の要素(今回の場合はdiv)を複製し、
更にその id と style(display属性) を変更してから appendChild で表示(タグの追加)させています。
なお、cloneNode で指定している引数(今回はtrue)によって、
複製する要素の子要素を引き継ぐか否かを判別します。
子要素がいらない場合はfalseをセットします。

で、結局この cloneNode は何のために使うのか?
という疑問が浮かぶと思います。
おそらく、 cleateElement を使って実際に要素(タグ)生成を行ってみると分かりますが、
一から要素を構築していくのは結構面倒です。
特に複雑かつ同じ構成の要素を並べたい場合は、スクリプトが無駄に長くなるだけです。
そんな時などに cloneNode が重宝するはずです。

以上、偏ったDOMネタでした。(久々にサクッと終わった)
名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ