Метод jQuery .empty () удаляет прослушиватели, подключенные через
var e = () => { ... };
element.addEventListener('click', e);
или только те, которые прикреплены через
var e = () => { ... };
$(element).on('click', e);
Я думаю об утечках памяти: если у меня есть динамически созданные элементы в DOM, к которым также подключены прослушиватели событий, и я хотел бы снова удалить эти элементы из DOM - могу ли я
- либо нужно удалить каждого слушателя из каждого узла, который я хотел бы удалить вручную, используя removeEventListener ()
- или использовать библиотеку типа jQuery для добавления и удаления прослушивателей, используя .on () и .empty () соответственно?
Насколько я понял этот вопрос , динамическое добавление и удаление элементов, имеющих прослушиватели событий, не очищает все ссылки и, следовательно, заставляет эти элементы оставаться в памяти.
var element = document.createElement('div');
var handler = function() {
alert('foo');
};
document.body.appendChild(element);
// Option 1
element.addEventListener('click', handler);
document.body.innerHTML = '';
// Option 2
element.addEventListener('click', handler);
$(document.body).empty();
// Option 3
$(element).on('click', handler);
$(document.body).empty();
Какая опция полностью удаляет элемент не только из DOM, но и полностью освобождает его память? Использование removeEventListener, к сожалению, для меня нецелесообразно ...