3

一部のDOMノードをあるコンテキストから別のコンテキストに移動すると、すべての子ノードがイベントリスナーを失いました。

HTML

<div><lots of deep nodes .../><div>
<div>
   <div>
     <div#newNode></div>
   </div>
</div>

JS

nodes = $('div').find('nodes')
$('#newNode').html(nodes)

移動後...移動したすべてのノードがイベントを失いました。

何かご意見は?

4

3 に答える 3

2

HTMLをコピーしていますが、イベント情報は含まれていません。

使いたい.clone(true)

$('.whatToCopy').clone(true).appendTo('#NewLocation');
于 2013-01-29T01:10:44.117 に答える
2

HTML を再構成またはコピーすると、以前のノードのイベント リスナーをまったく持たないまったく新しい DOM 要素が作成されます (要素は、イベント リスナーなしで要素を作成したページの元の HTML と同じようにゼロから作成されます)。したがって、当然のことながら、新しいコードを実行してイベント リスナーを追加しない限り、jQuery イベント リスナーは含まれません。

ノードを移動したい場合は、HTML を使用せずに (つまり、新しい DOM 要素を作成せずに) DOM 要素を DOM 内の別の場所に直接移動するだけで、すべてのイベント リスナーがアタッチされたままになります。たとえば、それらを移動するには:

nodes = $('div').find('nodes');
$('#newNode').append(nodes);

.clone(true, true)イベント リスナーがアタッチされたノードをコピーする場合は、データとイベントを含むノードのクローンを作成し、(子を含む) ディープ クローンを実行する which を使用できます。

nodes = $('div').find('nodes');
$('#newNode').append(nodes.clone(true, true));

詳細については、jQuery リファレンスを参照し.clone()てください。

于 2013-01-29T01:13:38.990 に答える
1

append または prepend on を使用してみてください$('#newNode').html()タグを再作成するので、すべてのイベントや内容が失われます

于 2013-01-29T01:13:19.177 に答える