这里我有一个节点列表和一个要从列表中删除的标识节点(从视图和内存中删除)。
var currentRow = dojo.query(this).parents("div").first()[0];
var parentDiv = dojo.query(currentRow).parents("div").first()[0];
var rowList = dojo.query(parentDiv).children();
问题是,
dojo.destroy(currentRow);
仅从视图中删除currentRow
,但是当我从rowList
循环firebug
时,我仍然可以看到rowList的大小是原始大小,而不是减去一个删除,所以它似乎留在内存中,那么如何从nodeList中删除一个节点并返回新的nodeList?
答案 0 :(得分:1)
销毁节点不会操纵rowList
数组,它只是从DOM树中删除节点。这意味着您在currentRow
数组(以及rowList
变量中)中有currentRow
个节点缓存。 DOM节点是JavaScript对象,当您从DOM树中删除它们时,如果它们无法访问,它们将在以后被JavaScript虚拟机垃圾收集。
在这种情况下,您只需在调用rowList
之后(或之后)查询dojo.destroy
:
var currentRow = dojo.query(this).parents("div").first()[0];
var parentDiv = dojo.query(currentRow).parents("div").first()[0];
dojo.destroy(currentRow);
currentRow = null;
var rowList = dojo.query(parentDiv).children();
如果currentRow
可全局访问,请将其设置为null
。
查看实际操作:http://jsfiddle.net/phusick/9MaUn/
了解更多Addy Osmani的Writing Fast, Memory-Efficient JavaScript。