当我将一些 dom 节点从一个上下文移动到另一个上下文时,所有一些子节点都失去了它们的事件侦听器。
HTML
<div><lots of deep nodes .../><div>
<div>
<div>
<div#newNode></div>
</div>
</div>
JS
nodes = $('div').find('nodes')
$('#newNode').html(nodes)
移动之后……所有移动的节点都丢失了它们的事件。
有什么想法吗?
当我将一些 dom 节点从一个上下文移动到另一个上下文时,所有一些子节点都失去了它们的事件侦听器。
HTML
<div><lots of deep nodes .../><div>
<div>
<div>
<div#newNode></div>
</div>
</div>
JS
nodes = $('div').find('nodes')
$('#newNode').html(nodes)
移动之后……所有移动的节点都丢失了它们的事件。
有什么想法吗?
重构或复制 HTML 会生成全新的 DOM 元素,这些元素没有任何先前节点的事件侦听器(这些元素是从头开始创建的,就像页面中的原始 HTML 创建的元素没有事件侦听器一样)。因此,很自然,除非您运行新代码向它们添加事件监听器,否则它们上不会有任何 jQuery 事件监听器。
如果您想移动节点,您可以直接将 DOM 元素移动到 DOM 中的不同位置,而无需使用 HTML(因此无需制作新的 DOM 元素),因此所有事件侦听器都保持连接状态。例如移动它们:
nodes = $('div').find('nodes');
$('#newNode').append(nodes);
如果要复制附加了事件侦听器的节点,则可以使用.clone(true, true)它将克隆带有数据和事件的节点并进行深度克隆(包括子节点):
nodes = $('div').find('nodes');
$('#newNode').append(nodes.clone(true, true));
有关更多信息,请参阅jQuery 参考。.clone()
尝试使用 append 或 prepend on $('#newNode')。
.html()重新创建标签,这样你就失去了所有的事件和东西