прилагает некоторые функциональные возможности к элементам DOM и хочет, чтобы быть в состоянии очистить все ссылки, когда элемент удаляется из DOM, поэтому он может быть мусором,простого варианта MutationObserver из DOMNodeRemovedFromDocument
Моего первоначального варианта для обнаружения removel элемента был такой:
var onremove = function(element, callback) {
var destroy = function() {
callback();
element.removeEventListener('DOMNodeRemovedFromDocument', destroy);
};
element.addEventListener('DOMNodeRemovedFromDocument', destroy);
};
Потом я прочитал, что mutation events были устаревшими в пользу MutationObserver. Поэтому я попытался передать свой код. Это то, что я придумал:
var isDescendant = function(desc, root) {
return !!desc && (desc === root || isDecendant(desc.parentNode, root));
};
var onremove = function(element, callback) {
var observer = new MutationObserver(function(mutations) {
_.forEach(mutations, function(mutation) {
_.forEach(mutation.removedNodes, function(removed) {
if (isDescendant(element, removed)) {
callback();
// allow garbage collection
observer.disconnect();
observer = undefined;
}
});
});
});
observer.observe(document, {
childList: true,
subtree: true
});
};
Это выглядит слишком сложным для меня (и не очень эффективным). Я что-то упустил или это действительно так, как это должно работать?
'observer.disconnect()' должен быть вызван в 'isDetached' случае, не так ли? – tobib
@robert не могли бы вы дать версию es5 этого? это трудно взломать из функций стрелок. (также вы использовали как одну стрелку, которая не конвертируется онлайн-редакторами) Также хотел бы знать, будет ли указанный выше код работать для какого-то конкретного прослушивателя элементов DOM ?? (скажем, если я заменяю observer.observe () Я проверил код tobib, он хорошо работает для вышеуказанного случая –
littledev
Действительно ли этот синтаксис действителен? – SWdV