Javascript 使用jquery动态生成元素,检查内存泄漏

Javascript 使用jquery动态生成元素,检查内存泄漏,javascript,jquery,html,dom,memory-leaks,Javascript,Jquery,Html,Dom,Memory Leaks,此结构是否会导致内存泄漏以及如何解决(策略建议)?。根据业务规则和用户操作,我们有一个包含许多动态生成元素(表、按钮、文本字段、复选框、组合框等)的页面。我们没有任何静态页面。每个元素都是从Javaservlet生成的,带有使用json的ajax响应 我们有一个包含所有控件的主容器div。有时我们需要删除所有包含的元素并放置新的元素,有时只更新一些属性,例如值 <div id="bigContainer"></div> 并使用jquery设置元素 $('#bigCont

此结构是否会导致内存泄漏以及如何解决(策略建议)?。根据业务规则和用户操作,我们有一个包含许多动态生成元素(表、按钮、文本字段、复选框、组合框等)的页面。我们没有任何静态页面。每个元素都是从Javaservlet生成的,带有使用json的ajax响应

我们有一个包含所有控件的主容器div。有时我们需要删除所有包含的元素并放置新的元素,有时只更新一些属性,例如值

<div id="bigContainer"></div>
并使用jquery设置元素

$('#bigContainer').html(currentPage);
在一些用户交互之后,我们不再需要这些元素,并且生成一个复选框

var jsCheckbox = '<div id="check1wrapper"><input id="check1" type="checkbox" onclick="checkAction(this)" style=".."></input></div>';
如您所见,我没有进行任何清理(我没有删除任何元素)。有什么坏习惯吗?内存泄漏?事件处理程序?僵尸dom对象

在第二个场景中,我生成了一个表,但用jquery绑定方法注册了它的侦听器:

var jsTable = '<div id="table1wrapper"><table id=table1><tr><td>colval1</td><td>colval2..</table>';

jsTable += '<script>registerTableCellListeners("table1")</script>';

$('#bigContainer').html(jsTable);
例如,在一些useraction之后,我们不再需要这个表,生成一个按钮并设置为container,它继续这样

$('#bigContainer').html(jsButtonNew);

问题是,当我们不再需要元素时,我们是否需要对元素调用jquery方法
remove()
,或者删除事件监听器(尤其是表的事件监听器)?这种机制是否存在内存泄漏的可能性?关于性能呢?

检查事件处理程序:谢谢,这很有帮助。我以前就知道,query.html不仅仅是设置innerHTML,它还处理处理程序。我将深入检查是否需要empty()用法。表呢?我必须注册mouseup、down、move和双击事件,因为所有单元格和表都有100多个单元格。这更好,因为您是“动态生成元素”,您需要添加类似以下的事件:$(.parent”)。on(“eventName”,“.className”,callback);检查这个答案:我不明白,为什么在页面加载时需要在页面上存在(parent)元素是不好的做法,在页面加载时添加一次事件处理程序。如果您想关闭特定的事件处理程序,您可以使用off函数,但在您的情况下,您不需要它。请检查以下事件处理程序:谢谢,这很有用。我以前就知道,query.html不仅仅是设置innerHTML,它还处理处理程序。我将深入检查是否需要empty()用法。表呢?我必须注册mouseup、down、move和双击事件,因为所有单元格和表都有100多个单元格。这更好,因为您是“动态生成元素”,您需要添加类似以下的事件:$(.parent”)。on(“eventName”,“.className”,callback);检查这个答案:我不明白,为什么在页面加载时需要在页面上存在(parent)元素是不好的做法,在页面加载时添加一次事件处理程序。如果您想关闭特定的事件处理程序,您可以使用off函数,但您不需要它。
$('#bigContainer').html(jsCheckbox);
var jsTable = '<div id="table1wrapper"><table id=table1><tr><td>colval1</td><td>colval2..</table>';

jsTable += '<script>registerTableCellListeners("table1")</script>';

$('#bigContainer').html(jsTable);
function registerTableCellListeners(id) {
  $('#id').find('td').bind('click', function() { 
       // handle cell event
$('#bigContainer').html(jsButtonNew);