我想我是否用jQuery html()方法覆盖div的html全部' old'从内存中删除DOM元素和所有侦听器?
例如:
HTML:
<div id='aDiv'>
<div id='anANotherDiv'>An Another Div</div>
</div>
使用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元素和监听器吗?
答案 0 :(得分:0)
您可以使用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);
});
});
答案 1 :(得分:0)
要解决事件监听器问题,我通常会使用&#34;全局点击&#34;方法(JSFiddle):
<强> HTML 强>
<div id="div1" data-clickable>
Parent Click
<div id="div2" data-clickable>
Child ClickClicks
</div>
</div>
<强> JS 强>
$(document.body).click(function(e){
var n="[data-clickable]", $t = $(e.target).is(n) ? $(e.target) : $(e.target).parents(n+":first");
switch ($t.attr('id')){
case 'div1':
console.debug("DIV1 clicked");
break;
case 'div2':
console.debug("DIV2 clicked");
break;
}
});
它会收听正文的点击次数,然后决定这是否是我们正在等待的点击次数。
至于元素替换问题,你无能为力。您必须提出一些其他方法,而不是.html()
答案 2 :(得分:0)
好的!!让我们从这个方向开始。
这是您的HTML
<div id='aDiv'>
<div id='anANotherDiv'>An Another Div</div>
</div>
现在aDiv
只包含一个div
,因为它的孩子是anANotherDiv
。现在,当你在控制台上进行此操作时
$("#adIV").html();
控制台输出将是
<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>
您实际上manipulating
完全是整个aDiv
结构。 .html()
基本上是changes
HTML结构。因此,您需要确定是否要完全更改特定HTML
或element
的{{1}}结构,或者只需node
或append
< / p>
希望我对你很清楚。
干杯!!