Javascript 如果我用jQuery更改一个div的HTML,所有DOM元素和侦听器都会从内存中删除吗?

Javascript 如果我用jQuery更改一个div的HTML,所有DOM元素和侦听器都会从内存中删除吗?,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,我在想,如果我用jQueryHTML方法覆盖div的html,所有“旧”DOM元素和从内存中删除的所有侦听器 例如: HTML: Javascript: $('anANotherDiv').click(function(){ var b='An Another Div' console.log(b); }); $('#aDiv').html('<div id='oDiv'>This div override the another</div>'); $

我在想,如果我用jQueryHTML方法覆盖div的html,所有“旧”DOM元素和从内存中删除的所有侦听器

例如:

HTML:

Javascript:

$('anANotherDiv').click(function(){
    var b='An Another Div'
    console.log(b);
});


$('#aDiv').html('<div id='oDiv'>This div override the another</div>');
$('#oDiv').click(function(){
    var a='This div override the another';
    console.log(a);
});
因此,当我重写旧的时,GC将删除旧的DOM元素和侦听器?

您可以使用jQuery中的on方法,您可以使用它将事件绑定到父元素,这样即使您更改了实际目标DIV的内容,事件也会被附加,因为我们已经将事件绑定到父元素

//Example:
<div id='aDiv'>
    <div id='anANotherDiv'>An Another Div</div>
</div>


$(function(){
   $("#aDiv").on("click", "div", function(){
      var a='This div override the another';
      console.log(a);
   });
});

为了解决事件侦听器问题,我通常使用全局单击方法:

HTML

它会倾听身体的咔哒声,然后决定这是否是我们等待的咔哒声。
至于元件更换问题,你们无能为力。你必须想出一些其他的方法,而不是.html

好的!!让我们从这里开始

这是你的HTML

<div id='aDiv'>
      <div id='anANotherDiv'>An Another Div</div>
</div>
控制台输出将是

<div id='anANotherDiv'>An Another Div</div>
现在当你在你的控制台上做类似的事情时

 $("#adIV").html();
$('#aDiv').html('<div id=\"oDiv\">This div override the another</div>');
控制台输出将仅为

<div id="oDiv">This div override the another</div>
你实际上是在完全操纵整个aDiv结构。html基本上改变了html结构。因此,您需要确定是要完全更改特定元素或节点的HTML结构,还是只需追加或执行其他操作

希望你明白我的意思


干杯

是的,没错。你想解决这个问题吗?很清楚,谢谢你的回答。javascript变量和事件侦听器有什么问题?我需要销毁一些东西吗?里面的DOM元素都会丢失。如果您对此很清楚,请接受我的回答,这样对其他人也有好处。javascript变量和事件侦听器不是DOM元素的一部分。在这里,任何操作都需要使用jQuery函数。如果要删除,请使用.remove。有很多函数可用。您可以查看jQuery API
<div id='anANotherDiv'>An Another Div</div>
$('#aDiv').html('<div id=\"oDiv\">This div override the another</div>');
<div id="oDiv">This div override the another</div>