Я хочу, чтобы наблюдатель мутации слушал, если его целевой узел сам по себе удален в JavaScript
Я использую наблюдатель мутации на целевом узле. Он срабатывает, если какой-либо из дочерних узлов или свойств изменяется. Но у меня есть случай, когда мне пришлось обрабатывать удаление целевого узла. Это не работает. Есть ли способ справиться с этим?
2 ответа
MutationObservers может наблюдать за 3 вещами:
- Изменение атрибута
- Изменение текстового содержимого
- Изменение списка детей
Затем, по желанию, эти события изменений могут всплыть, поэтому, если вы хотите внести изменения как в цель, так и во всех дочерних объектов цели, вы можете сделать это.
Это означает, что то, что вы хотите, не может быть сделано, слушая вашу цель. Вам нужно будет присоединить наблюдателя к родительскому узлу цели и прослушать изменение childList для родительского узла, который удаляет узел, который вы хотите отслеживать.
например, вместо этого поддельного примера того, на что вы надеялись
var observer = new MutationObserver(callback);
observer(target, {
// Fake non-existent option
parent: true
});
ты сделаешь
var observer = new MutationObserver(function(mutations){
var targetRemoved = mutations.some(function(mutation){
return mutation.removedNodes.indexOf(target) !== -1;
});
if (targetRemoved) callback();
});
observer(target.parentNode, {
childList: true
});
can-dom-mutate может сделать это:
import domMutate from "can-dom-mutate";
domMutate.onNodeRemoval(yourEleement, function(){
})
Это делается путем прослушивания всего документа на предмет удаления элементов.