Мне нужно предотвратить DOM-изменение с помощью mutationobserver.Может ли MutationObserver вносить изменения прямо перед мутацией?
Я был (в прошлом) следующий код, чтобы предотвратить определенные изменения:
document.bind("DOMSubtreeModified", function() {
document.find('.Xx.xJ:Contains("wham")').closest("[jsmodel='XNmfOc']").hide();
});
Из соображений производительности я не хотел, чтобы проверить полный текст документа на любой РОМ изменения, но только добавил содержание таким образом я изменил это (сейчас):
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
[].slice.call(mutation.addedNodes).forEach(function (addedNode) {
StartFilter(addedNode);
});
});
});
observer.observe(document, {
childList: true,
subtree:true,
characterData:true,
attributes:true
});
function StartFilter(newNode) {
$(newNode).find('.Xx.xJ:Contains("wham")').closest("[jsmodel='XNmfOc']").hide();
}
Но это на самом деле не работает. Я предполагаю, что «newNode» на самом деле не является ссылкой на DOM-Element. (Селектор действителен, "$(newNode).find('.Xx.xJ:Contains("wham")').closest("[jsmodel='XNmfOc']")"
возвращает элемент).
Я не нашел никакого метода/свойства, чтобы отклонить dom-change в MutationObserver. Есть ли способ достичь того, чего я хочу БЕЗ проверки всего документа каждый раз?
Спасибо за этого всеобъемлющего объяснения и примера. Особенно первый абзац помогает мне понять, что я, похоже, сталкивался с неправильным направлением. Вы должны заработать трофей для этого :) –
Просто, если кому-то интересно: «Настоящая» проблема заключалась в том, что я поставил «наблюдатель var» внутри функции, которая была вызвана один раз вместо «корневой» области JS-файла –
BTW: .hide() НЕ «мигает». DIV никогда не появляется (Chrome) :) –