使用jQuery为典型元素节点实现“更改”事件

时间:2009-12-04 02:34:23

标签: javascript jquery

我真的想要一种方法来观察节点的变化并根据这些变化触发功能。

我要将“更改”定义为:

  • 对节点和所有后代进行属性编辑/添加/删除。
  • 文本节点在节点和所有后代内编辑/添加/删除。
  • 绑定/解除绑定到节点和所有后代的事件。
  • 添加/删除后代。
  • CSS更改为节点和所有后代。
  • 删除节点。

现在也许我会以错误的方式解决这个问题,但我的想法是对预先存在的jQuery方法进行修复,这些方法负责上面列出的修改,并添加一些在所有节点上触发事件的代码在集合中,以及他们的祖先(模拟冒泡事件)。

这样的事情:

$.fn.attrMOD = $.fn.attr;

$.fn.attr = function() {
    this.each(function(){
        $.fn.trigger.call($(this).parents().add(this), 'modify', { changeType: 'attr', originalTarget: $(this) });
    });

    return $.fn.attrMOD.apply(this, arguments);
};

我会为许多方法(css,bind,unbind等)执行此操作。

因此,要订阅此“修改”事件,您可以执行以下操作:

$('div').bind('modify', function() { console.log('Div was modified') })

//this would trigger it
$('div').attr('hello', 'world');

所以有几个问题:

  • 我疯了试试吗?
  • 我是以正确的方式来做这件事的吗?请记住,上面的代码并不接近最终,但这是我的一般想法。

感谢阅读!

1 个答案:

答案 0 :(得分:0)

看起来它对我有用......但是对于读取此线程的任何人(因为我确信提问者都知道)可能值得注意,只有在属性被修改时才会触发修改事件通过jQuery的attr(key,val)方法。任何改变属性的尝试都不会启动它。

另外......您需要确保在.css(x,y).width(val).height(val)以及.addClass(val).removeClass(val)添加一个脱离我的头顶......可能还有更多。你可能会想要做很多事情。

我对“为什么?”更好奇。你想这样做......哈哈。