Я хочу, чтобы наблюдатель мутации слушал, если его целевой узел сам по себе удален в 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(){

})

Это делается путем прослушивания всего документа на предмет удаления элементов.

Другие вопросы по тегам