2011-04-26 3 views
1

J'ai un plugin qui affiche/cache les colonnes dans une table.jQuery table de moniteur pour le changement?

Cependant, j'utilise également plusieurs autres plugins sur la table, donc la table est assez dynamique.

Je cherche un moyen de surveiller la table pour chaque fois que quelque chose lui arrive.

par exemple,

lignes sont ajoutées, les lignes sont supprimées, les lignes sont cachées ...

est-il un événement .change() général pour tout élément de dom?

Répondre

2

Vous pouvez utiliser livequery pour détecter lorsque les lignes ont été ajoutées/supprimées:

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

Juste quelques informations: http://jupiterjs.com/news/why-you-should-never-use-jquery-live –

+0

@Jared Je sais que les gars de Jupiter savent ce dont ils parlent, mais Je pensais que ce message était un peu inflammatoire. D'après le titre, je m'attendais à ce qu'ils disent qu'il avait un trou de sécurité béant, mais il s'avère que c'est plus lent et moins réutilisable que '.delegate()' qui ne peut pas toujours être utilisé pour faire quoi ' .live() 'et' .livequery() 'peuvent faire. –

+0

@blowski - Vrai, c'est pourquoi j'ai dit "juste quelques informations". Comme dans "considérer". ;) –

4

Vous pouvez lier à des événements 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

Bien sûr, votre Il faudrait donner des identifiants aux éléments pour qu'ils soient utiles.

+0

Ces événements ne sont-ils pas spécifiques à Firefox? – Eli

+0

@eli: nope - ceux qui sont des événements W3C communs (juste essayé le violon dans Chrome). Il y en a d'autres qui sont * définis * comme spécifiques à Mozilla, mais ceux-ci ne sont pas dans cette liste. –

+0

Mais alors, nous savons tous que IE ne suit pas les événements w3c, donc ce code ne fonctionnera pas là. – Eli

2

Malheureusement, il n'y a pas d'événement de changement entre navigateurs pour la manipulation du DOM. Vous avez quelques options:

  1. Utilisez les fonctions qui manipulent la table pour effectuer vos autres actions.
  2. Créez un pub/sous-système pour publier et vous abonner à vos propres événements de table personnalisés.
Questions connexes