2011-04-26 57 views
1

我有一个插件显示/隐藏表中的列。jQuery监视器表的更改?

但是我也在桌子上使用了其他几个插件,因此这个桌子是非常动态的。

我正在寻找一种方法来监视表的每当发生什么事情。

例如,

行添加,行被删除,行是隐藏...

有一般.change()事件的任何DOM元素?

回答

2

您可以使用livequery检测时行已添加/删除:

$("tr").livequery(function() { 
    console.log($(this) + " was added"); 
}, function() { 
    console.log($(this) + " was removed"); 
}); 
+0

只是一些信息:http://jupiterjs.com/news/why-you-should-never-use-jquery-live – 2011-04-26 01:26:36

+0

@Jared我知道木星的家伙知道他们在说什么,但是,我认为这篇文章有点煽动性。从标题看,我期待他们说它有一个巨大的安全漏洞,但事实证明,它只是比较慢,并不像'.delegate()'那样可以重复使用, .live()'和'.livequery()'可以。 – 2011-04-26 01:31:48

+0

@blowski - 真的,这就是为什么我说“只是一些信息”。如在“考虑”中。 ;) – 2011-04-26 01:35:18

4

你可以绑定到DOM事件:

$(document).ready(function(){ 
    $(document).bind('DOMNodeInserted', function(event){ 
     console.log('inserted '+event.target.nodeName + ', parent: '+event.relatedNode.getAttribute('id')); 
    }); 
    $(document).bind('DOMNodeRemoved', function(event){ 
     console.log('removed'); 
    }); 
    $(document).bind('DOMSubtreeModified', function(event){ 
     console.log('modified '+event.target.getAttribute('id')); 
    }); 

    $('#tbl').append($('<tr></tr>'). 
        attr('id', 'newrow')); 
}); 

Fiddle here

当然,你的元素将不得不被赋予标识符以使其有用。

+0

这些事件不是特定于Firefox的吗? – Eli 2011-04-26 01:25:42

+0

@eli:不 - 这些是常见的w3c事件(只是在Chrome中试用过)。还有一些*被*定义为Mozilla特有的,但这些不在该列表中。 – 2011-04-26 01:27:11

+0

但是,我们都知道IE不遵循w3c事件,所以这段代码在那里不起作用。 – Eli 2011-04-26 01:28:37

2

不幸的是,没有一个操纵DOM的跨浏览器更改事件。你有几个选择:

  1. 使用操纵表的功能也做你的其他行动。
  2. 创建一个发布和订阅自己的自定义表事件的发布/订阅系统。