Dojo:如何从NodeList中删除/销毁一个节点

时间:2013-03-20 21:12:44

标签: javascript dojo

这里我有一个节点列表和一个要从列表中删除的标识节点(从视图和内存中删除)。

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?

1 个答案:

答案 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