.clone()
textarea
select
に入力されたユーザーの選択内容など)の動的な状態は、クローン化された要素にはコピーされません。
.clone()
は、挿入方法の 1 つと一緒に使用すると、ページ上の要素を複製する便利な方法です。 次のようなHTMLを考えてみましょう。
1
2
3
4
|
|
.append()
の議論で示されたように。 通常、要素がDOMのどこかに挿入されると、その要素は以前の位置から移動します。 つまり、コードを考えると
1
|
|
その結果、DOM構造は次のようになります。
1
2
3
4
5
です。 です。 6
|
|
これを防ぎ、代わりに要素のコピーを作成するには、次のように記述します。 以下のように書くことができます。
1
|
|
これで生成されます。
1
2
3
4
5
6
7
|
|
注意。 .clone()
メソッドを使用する場合、クローンされた要素やその内容を変更してからドキュメントに(再)挿入することができます。
通常、元の要素にバインドされているイベント ハンドラは、クローンにはコピーされません。 オプションの withDataAndEvents
パラメータを使用すると、この動作を変更し、代わりに、要素の新しいコピーにバインドされたすべてのイベント ハンドラのコピーを作成することができます。 jQuery 1.4の時点では、すべての要素データ(.data()
メソッドでアタッチされたもの)も新しいコピーにコピーされます。
ただし、要素データ内のオブジェクトや配列はコピーされず、複製された要素と元の要素の間で引き続き共有されます。 すべてのデータを深くコピーするには、それぞれを手動でコピーします。
1
2
3
4
5
|
|
jQuery 1.5以降では、以下のようになります。5では、withDataAndEvents
deepWithDataAndEvents
で強化することで、クローンされた要素のすべての子のイベントとデータをコピーすることができます。
注意: .clone()
id
class
属性を識別子として使用することが推奨されます。