contenteditable: Обнаружение изменений элемента при использовании модификатора строки/столбца

Я использовал следующий код из предыдущей публикации для обнаружения (большинства) изменений в элементе с атрибутом «contenteditable». Но, к сожалению, он не включает изменения в таблицах, которые происходят при использовании элементов управления модификатором строки/столбца таблицы, предоставляемых браузером (Firefox).

    $('[contenteditable]').live('focus', function() {
       var $this = $(this);
       $this.data('before', $this.html());
       return $this;
    }).live('blur keyup paste', function() {
       var $this = $(this);
       if ($this.data('before') !== $this.html()) {
           $this.data('before', $this.html());
           $this.trigger('change');
       }
       return $this;
    });

Как я могу изменить этот код, чтобы включить обнаружение изменений, вызванных элементами управления браузера?


person devnull69    schedule 05.11.2011    source источник


Ответы (1)


В качестве обходного пути я сделал следующее

  1. Я добавил к элементу прослушиватель событий для DOMSubtreeModified.
  2. Он срабатывает очень часто, поэтому я добавил задержку setTimeout.
  3. В отложенной функции я проверяю, изменилось ли содержимое элемента тем же методом, используя $(this).data(), как указано выше.

Это немного грязно, но это помогает.

person devnull69    schedule 15.11.2011