jQuery:观察节点值的变化

发布于 2024-08-07 19:07:06 字数 1266 浏览 7 评论 0 原文

我想观察使用 contenteditable 编辑的元素的 nodeValue 变化。基本上,我想在节点值更改时运行一个函数。

我找到了这个帖子: http://james.padolsey.com/javascript/monitoring-dom-properties/< /a>

这似乎有一个我想要的插件。

这是监视插件:

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 一起使用。谢谢!

I want to watch for the nodeValue change of an element that's edited with contenteditable. Basically, I want to run a function on change of the nodevalue.

I found this post:
http://james.padolsey.com/javascript/monitoring-dom-properties/

Which seems to have a plugin for what I want.

Here's the watch plugin:

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;
};

As an example, I can watch an input's value like this:

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

But not a contenteditable's nodevalue (its text content):

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

Here's the live example:

http://jsbin.com/iconi/edit

Anyone know how to adapt the watch method to work with nodevalue. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱格式化 2024-08-14 19:07:06

这不是更简单吗?

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

至于输入:

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

Isn't this simpler?

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

As for the input:

 $('#input')
    .bind('change keyup',
       function() {
          $('#text')
             .text($(this).val());
       }
    );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文