1

以前の投稿の次のコードを使用して、属性「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;
    });

このコードを変更して、ブラウザーコントロールによって課された変更の検出を含めるにはどうすればよいですか?

4

1 に答える 1

1

回避策として、私は次のことを行いました

  1. 要素にのイベントリスナーを追加しましたDOMSubtreeModified
  2. 非常に頻繁に発火するので、setTimeout遅延を追加しました
  3. 遅延関数では、上記と同じ方法で要素の内容が変更されているかどうかを確認し$(this).data()ます。

これは少し汚いですが、それはトリックを行います。

于 2011-11-15T16:46:33.180 に答える