div があります。div の新しいコピーをページのどこかに追加したいのですが、新しい ID と新しいイベント ハンドラーが必要です。新しい ID は、「元の ID + _cloned」の形式にすることができます。新しい ID を提供することはできますが、元の div にあったすべてのイベント ハンドラーを、新しい ID にマップされた新しい div にアタッチする必要があります。jQueryを使用してそれを行う方法はありますか?
4 に答える
関数の jQuery ドキュメントを.clone()
見ると、要素自体のデータとイベント ハンドラーを含めるための 2 つのオプションのパラメーターと、クローン作成時の要素の子孫があることがわかります。
これにより、イベント ハンドラーの保持が処理されます (デリゲートされるのではなく、その要素に直接バインドされている限り)。その場合はid
、結果の要素のプロパティを変更するだけで済みます。以下は、必要なことを行う必要があります。
$('#myid').clone(true).prop('id', function(i, oldId) {
return oldId + '_cloned';
});
.clone( [withDataAndEvents] [, deepWithDataAndEvents]
イベントハンドラとデータをコピーするために使用できます。
ただし、IDによってバインドされた委任されたイベントが、複製された要素で引き続き機能するかどうかは疑問です。
例: http: //jsfiddle.net/Sfrm9/
$(document).on('click'. '#someId', function () { });
#someId
-クローンを作成して次のように変更した後は機能しません#someId_cloned
ここで述べたように、mcpDESIGNSclass
は、委任されたハンドラーのidの代わりに使用するようにマップする必要があります。そうすれば、クローンは正常に機能するはずです。
元:
<div id="#someId" class="someClass" >Test</div>
JS:
$(document).on('click'. '.someClass', function () { });
それ以外の
$(document).on('click'. '#someId', function () { });
.clone(true);
このようにして、イベント ハンドラーを要素と共にコピーする必要があります。
div のクラスを使用してイベントをバインドできます。次に、そのイベントに応答する必要があるすべての div に同じクラスを残すことができます。
イベントが id セレクターを使用してバインドされている場合、id を変更する必要があるため、新しい div では機能しませんが、クラスでは機能するはずです。