jQuery

clone()

は、一致する要素のコピーを作成するために使用されます。また、対応する要素と一緒にイベントハンドラとデータをコピーする必要があるかどうかを示すブール型パラメータもサポートしています。

1. html要素を複製する

たとえば、次のhtmlコードをクローンします。

 <div class="smallBox">
    I'm a small box
    <div class="smallInnerBox">I'm a small small inner box</div>
 </div>

上記の要素のコピーを作成するにはclone()を使用し、クラス名が “smallBox”のdivタグの後にコピーした要素を配置します。

$('.smallBox').clone().insertAfter(".smallBox");

結果 :

 <div class="smallBox">
    I'm a small box
    <div class="smallInnerBox">I'm a small small inner box</div>
 </div>
  <div class="smallBox">
    I'm a small box
    <div class="smallInnerBox">I'm a small small inner box</div>
 </div>

2.イベントハンドラをクローン化する

次の例では、ボタンのクリックイベントを複製し、idが ‘cloneButton1’のボタンをコピーします。

<button id="cloneButton1">clone()</button>

<script type="text/javascript">
    $("#cloneButton1").click(function () {

      $('.smallBox').clone().insertAfter(".smallBox");

    });
</script>

デフォルトの** clone()メソッドまたはclone(false)メソッドを使用している場合は、button要素のみをコピーしますが、click()イベントハンドラはコピーしません。

$('#cloneButton1').clone().insertAfter("#cloneButton1");

一致する要素とともにclick()イベントハンドラをコピーするには、clone(true)を使用する必要があります。

$('#cloneButton1').clone(true).insertAfter("#cloneButton1");

自分で試してみてください

<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>

<style type="text/css">
    .smallBox{
        padding:8px;
        border:1px solid blue;
        margin:8px;
    }
    .smallInnerBox{
        padding:8px;
        border:1px solid green;
        margin:8px;
    }
</style>

</head>
<body>
  <h1>jQuery clone() example</h1>

  <div class="smallBox">
    I'm a small box
    <div class="smallInnerBox">I'm a small small inner box</div>
   </div>

  <p>
  <button id="cloneButton1">clone()</button>
  <button id="cloneButton2">clone() button (default)</button>
  <button id="cloneButton3">clone(true) button</button>
  <button id="reset">reset</button>
  </p>

<script type="text/javascript">

    $("#reset").click(function () {
      location.reload();
    });

    $("#cloneButton1").click(function () {

      $('.smallBox').clone().insertAfter(".smallBox");

    });

    $("#cloneButton2").click(function () {

      $('#cloneButton1').clone(false).insertAfter("#cloneButton1");

    });

    $("#cloneButton3").click(function () {

      $('#cloneButton1').clone(true).insertAfter("#cloneButton1");

    });

</script>
</body>
</html>