2011-04-26 47 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. 創建一個發佈和訂閱自己的自定義表事件的發佈/訂閱系統。