Допустим, у меня есть два элемента на странице. Один из них — div, а другой — его дочерний элемент, achor. Допустим, я добавил событие к этому якорю через anchor.addEvent('click', ...)
. Если я установлю div .innerHTML = ''
, будет ли событие click
, связанное с якорем, удалено/утилизировано/собран мусор?
MooTools: Удаление элементов
Ответы (3)
Это зависит от того, есть ли у вас еще ссылка на «якорный» экземпляр DOM. Если да, то он останется в памяти до тех пор, пока не будут удалены все ссылки.
Пример теста:
var parent = new Element('div');
var child = new Element('div', {
events : {
click : function() {
alert('child clicked');
}
}
});
child.innerHTML = 'child content';
parent.appendChild(child);
document.body.appendChild(parent);
parent.innerHTML = 'parent content';
document.body.appendChild(child);
person
nemisj
schedule
02.02.2010
Согласно MooTools API: destroy()
— это метод, который:
Очищает элемент от всех его дочерних элементов, удаляет и выбрасывает элемент. Полезно для очистки памяти перед pageUnload.
Я подозреваю, что то, что происходит с удаленными якорями, когда их родительские элементы удаляются с помощью innerHTML = ''
, будет зависеть от браузера.
jQuery предлагает метод empty()
, я предполагаю, что другие библиотеки, вероятно, тоже предлагают методы. Вы можете увидеть довольно хорошее обсуждение этой темы в разделе Удаление элемента из DOMа>.
person
artlung
schedule
06.02.2010
Я использую destroy() в MooTools, когда хочу от чего-то полностью избавиться.
- person Shawn Steward; 06.02.2010
- ИМХО, вы должны использовать empty() вместо innerHTML = "".
- Ссылка останется, как сказал @nemisj, но она будет «плавающей» и бесполезной. Я сделал несколько тестов здесь: тестовый пример, возможно, вы найдете что-то интересное.
person
Nir
schedule
03.02.2010