MutationObserver как отменить изменения в тексте

let b = new MutationObserver(a => {
  console.log(a); // console.log(изменения)
});

// наблюдать за всем, кроме атрибутов
b.observe(elem, {
  childList: true, // наблюдать за непосредственными детьми
  subtree: true, // и более глубокими потомками
  characterDataOldValue: true  // передавать старое значение в колбэк
});
<div contentEditable id="elem">Отредактируй <b>меня</b>, пожалуйста</div>

Как сделать чтобы слово меня не изменялось с помощью наблюдателя ?


Ответы (1 шт):

Автор решения: Dim_K

Обозреватель не может отменять изменения, он лишь говорит о них. Но ничего не мешает сохранять состояние самостоятельно и откатывать в нужной ситуации

let prevState = elem.innerHTML, b = new MutationObserver(a => {
  if (!elem.innerHTML.match(/<b>меня<\/b>/))
    elem.innerHTML = prevState;
  prevState = elem.innerHTML;
});

// наблюдать за всем, кроме атрибутов
b.observe(elem, {
  childList: true, // наблюдать за непосредственными детьми
  subtree: true, // и более глубокими потомками
  characterDataOldValue: true  // передавать старое значение в колбэк
});
<div contentEditable id="elem">Отредактируй <b>меня</b>, пожалуйста</div>

→ Ссылка