Tu mám zoznam uzlov a identifikovaných uzlov, ktoré chcú zo zoznamu odstrániť (z pohľadu aj z pamäte).
var currentRow = dojo.query(this).parents("div").first()[0];
var parentDiv = dojo.query(currentRow).parents("div").first()[0];
var rowList = dojo.query(parentDiv).children();
Problém je,
dojo.destroy(currentRow);
odstrániť iba currentRow
z pohľadu, ale keď som slučku rowList
, od firebug
Stále vidím, že veľkosť riadkuList je pôvodná veľkosť bez mínus odstránenia, takže sa zdá, že zostane v pamäti, ako teda môžeme odstrániť uzol z uzlaList a vrátiť nový uzolList?
odpovede:
1 pre odpoveď č. 1Ničenie uzla nemanipuluje rowList
pole, iba odstráni uzol zo stromu DOM. To znamená, že máte currentRow
uzol medzipamäte v rowList
pole (a tiež v currentRow
premenná). Uzly DOM sú objekty JavaScript, keď ich odstránite zo stromu DOM, neskôr sa stanú odpadmi zhromaždenými virtuálnym strojom JavaScript, ak nie sú dosiahnuteľné.
V tomto prípade stačí dotaz rowList
po (alebo znovu po) volaní 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();
ak currentRow
je globálne dosiahnuteľné null
.
Vidieť to v akcii: http://jsfiddle.net/phusick/9MaUn/
Prečítajte si viac v Addy Osmani Rýchle písanie a efektívne JavaScript.