JSFiddle - React, Tailwind, and code Playground

by Chen JianSheng

HTML

<p>MutationObserver 监听下面的 ol 元素:</p>

<ol contenteditable oninput="" id="ol-input">
  <li>点击这里请输入对应内容</li>
</ol>

<p>textarea 为触发回调后显示ol 的内容:</p>

<textarea name="" id="text-area" cols="30" rows="10"></textarea>

JavaScript

var MutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver;

var $input = document.getElementById('ol-input');
var $textarea = document.getElementById('text-area');
console.log('input is:', $input, $textarea);
var observer = new MutationObserver(function(mutations) {
  console.log('observer!', mutations)
  
  mutations.forEach(function(mutation) {
    if (mutation.type === 'childList' || mutation.type === 'characterData') {
      var olList = [].slice.call($input.children)
        .map(function(node) {
          return node.innerHTML;
        })
        .filter(function(s) {
          if (s === '<br>') return false;
          return true;
        });
      $textarea.value = olList.join('\n');
    }
  })
})

var config = {
  attributes: true,
  subtree: true,
  characterData: true,
  childList: true
};

observer.observe($input, config);