MooTools: Удаление элементов

Допустим, у меня есть два элемента на странице. Один из них — div, а другой — его дочерний элемент, achor. Допустим, я добавил событие к этому якорю через anchor.addEvent('click', ...). Если я установлю div .innerHTML = '', будет ли событие click, связанное с якорем, удалено/утилизировано/собран мусор?


person JamesBrownIsDead    schedule 02.02.2010    source источник


Ответы (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
comment
Я использую destroy() в MooTools, когда хочу от чего-то полностью избавиться. - person Shawn Steward; 06.02.2010

  1. ИМХО, вы должны использовать empty() вместо innerHTML = "".
  2. Ссылка останется, как сказал @nemisj, но она будет «плавающей» и бесполезной. Я сделал несколько тестов здесь: тестовый пример, возможно, вы найдете что-то интересное.
person Nir    schedule 03.02.2010