2011-07-20 2 views
0

Il semble que dans jQuery après la destruction de l'élément, toutes les données relatives à jQuery sont détruites - y compris les valeurs enregistrées avec data(), tous les gestionnaires d'événements, etc. préservé et peut être utilisé à nouveau. Je me demande s'il est possible de récupérer facilement ces données, ou dois-je les sauvegarder d'une manière ou d'une autre et les recréer?jquery gestionnaires/données recréer après dom destroy

Exemple simple écrit en jquery: http://jsbin.com/examuh/2/edit. Vous pouvez voir l'effet au http://jsbin.com/examuh/2. Comme vous pouvez le voir, seul le troisième gestionnaire fonctionne, ce qui est ajouté après que la nouvelle demande fonctionne - même celui ajouté après détruire, mais avant de réappliquer ne fonctionne pas. Apparemment, le DOM avec le #id est préservé. PS: Mon exemple réel est plus complexe, et le refaire pour déplacer l'élément dom dans un endroit sûr avant de détruire le parent sera probablement très compliqué.

Répondre

2

Si vous souhaitez conserver les gestionnaires d'événements et les données jquery, etc., vous pouvez utiliser la méthode jQuery .detach() pour supprimer les éléments du DOM. Vous pouvez ensuite le réinsérer dans l'arborescence DOM à une date ultérieure en utilisant les méthodes standard .append()/.prepend() etc.

Si vous utilisez .remove(), les données jQuery sont supprimées. Votre exemple semble démontrer que la définition de la propriété html() d'un div a un effet similaire à l'utilisation de .remove() dans jQuery sur les éléments enfants du div.

var keepThis = $("#toRemove").detach(); 
//.. later on 
$("#insert-point").append(keepThis); 
+0

Merci, cela explique ce qui se passe. Comme je ne savais pas au moment de la suppression quels éléments enfants pourraient être nécessaires plus tard, je stocke mes données ailleurs stockées identifiées par un dom ID et les rattache plus tard si nécessaire. – trakos

Questions connexes