2009-10-09 40 views
2

我想监视用contenteditable编辑的元素的nodeValue变化。基本上,我想在nodevalue的变化上运行一个函数。jQuery:观察nodevalue变化

我发现这个职位: http://james.padolsey.com/javascript/monitoring-dom-properties/

这似乎已经为我想要的插件。

这里的手表插件:

jQuery.fn.watch = function(id, fn) { 

    return this.each(function(){ 

     var self = this; 

     var oldVal = self[id]; 
     $(self).data(
      'watch_timer', 
      setInterval(function(){ 
       if (self[id] !== oldVal) { 
        fn.call(self, id, oldVal, self[id]); 
        oldVal = self[id]; 
       } 
      }, 100) 
     ); 

    }); 

    return self; 
}; 

举个例子,我可以看一个输入的值是这样的:

$('#input').watch('value', function(propName, oldVal, newVal){ 
    $("#text").text(newVal); 
    }); 

但不是CONTENTEDITABLE的的nodeValue(其文本内容):

$('#ce').watch('nodeValue', function(propName, oldVal, newVal){ 
    $("#text").text(newVal); 
    }); 

下面是现场示例:

http://jsbin.com/iconi/edit

任何人都知道如何使watch方法适用于nodevalue。谢谢!

回答

0

这难道不简单吗?

$('#ce') 
    .bind('change keyup', 
     function() { 
      $('#text') 
      .text($(this).text()); 
     } 
    ); 

至于输入:

$('#input') 
    .bind('change keyup', 
     function() { 
      $('#text') 
      .text($(this).val()); 
     } 
    ); 
+0

感谢您的建议。问题发生了变化,div元素没有更改事件。这意味着复制和粘贴的文本将不会被保存。 – Jourkey