改變innerHTML關(guān)聯(lián)導(dǎo)致內(nèi)存無法釋放
使用JavaScript進(jìn)行DOM操作的時(shí)候,視瀏覽器的情況,總會(huì)遇到些有趣的事情。這次描述的問題和IE6和innerHTML關(guān)聯(lián)有關(guān):細(xì)節(jié)記錄, ie6 對已刪除結(jié)點(diǎn)的innerHTML以及dom操作時(shí)會(huì)出現(xiàn)該刪除節(jié)點(diǎn)的內(nèi)存再也釋放不掉,而設(shè)置刪除節(jié)點(diǎn)的屬性以及 css 則沒有問題。
經(jīng)常在 xhr 中回調(diào)處理結(jié)點(diǎn)的注意了,可能要處理的結(jié)點(diǎn)已經(jīng)刪除了。
測試代碼:
- < div id="p">
- < a id="c">
- xx
- < /a>
- < /div>
- < script>
- window.onload=function(){
- var a=document.getElementById("c");
- document.getElementById("p").innerHTML="";
- //css,屬性沒有問題
- //a.style.width="1px";
- //a.href="xx";
- //設(shè)置innerHTML就有問題了:改變了innerHTML關(guān)聯(lián)
- a.innerHTML='yy';
- //dom a 和 span 都無法釋放了
- //a.appendChild(document.createElement("span"));
- //a=null;
- }
- < /script>
正常情況下:
頁面執(zhí)行后 in-use 結(jié)點(diǎn) 6 個(gè) ,a 已經(jīng)釋放了
innerHTML關(guān)聯(lián):
改變了已刪除結(jié)點(diǎn)的innerHTML in-use 結(jié)點(diǎn) 7 個(gè) ,a 無法釋放
【編輯推薦】