我正在使用一个名为jqWidgets的外部 JS Widget 库,主要用于其功能丰富的 GRIDS。我正在构建一个单页应用程序,它在整个应用程序的使用过程中添加和删除大量网格。我遇到了 DOM 节点计数增加的问题,我设法减少了事件侦听器计数,尽管这也在缓慢上升。例子:
Javascript:
$(document).ready(function () {
$("#runTest").on('click', function(){
$("#testGrid").jqxGrid({
width: 795,
selectionmode: 'singlecell',
editable: true,
sortable: true,
filterable: true,
rowsheight: 20,
height: 200,
columns: [
{text: 'Activity ID', datafield: 'activity_id', width: 150},
{text: 'Description', datafield: 'activity_description', width: 150},
{ text: 'Notes ⁄ Comments', datafield: 'activity_notes'}
]
});
});
$("#destroyGrid").on('click', function(){
$("#runTest").off('click');
$("#testGrid").jqxGrid('destroy');
$("#testDiv").remove();
});
});
HTML:
<div id='testDiv'>
<div id='testGrid'></div>
</div>
<input type="button" value="click me" id="runTest" />
<input type="button" value="destroy" id="destroyGrid" />
当单击runTest按钮创建网格时,我的
DOM 节点计数从318变为880
,
事件侦听器计数从8变为132。
单击销毁按钮(并发生垃圾收集)后,
DOM 节点计数从880变为645
,
事件侦听器计数从132变为32。
理论上不应该值恢复到原始状态吗?我在这里错过了什么吗?我已经阅读了大量关于这个主题的帖子,而且我似乎遵循标准做法,所以我很想这是 jqWidget 库的问题,而不是我的代码,任何帮助或建议都值得赞赏。
我尝试了 empty() 和 remove() ,结果相同。