【问题标题】:jQuery: Watching for nodevalue changejQuery:观察节点值的变化
【发布时间】:2009-10-09 22:22:41
【问题描述】:

我想观察使用 contenteditable 编辑的元素的 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 的节点值(它的文本内容):

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

以下是实际示例:

http://jsbin.com/iconi/edit

任何人都知道如何调整 watch 方法以使用 nodevalue。谢谢!

【问题讨论】:

    标签: javascript jquery watch


    【解决方案1】:

    这不是更简单吗?

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

    至于输入:

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

    【讨论】:

    • 感谢您的建议。问题变了,没有 div 元素的 change 事件。这意味着不会保存复制和粘贴的文本。
    猜你喜欢
    • 2011-04-07
    • 2017-12-23
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多