2010-06-02 4 views
1

J'ai quelques objets, qui gardent créés DOMObjects, comme ici:append Cant "utilisé" DOMObject dans IE

function category(){ 
    var domBlock; 
    this.block = function(){ 
     if (!domBlock){ 
      // Here dom-object constructor $('<div></div>'); etc 
     } 
     return domBlock; // jquery object, 
       // but i test and native document.createElement 
    } 
} 

ì zone de catégorie claire, et ajoutez anciens et nouveaux reçu (avec Ajax) objets:

area.html(''); 
for(id in category_list){ 
    area.append(category_list[id].block()); 
} 

où category_list est une liste contenant des objets de catégorie. La zone est un objet jQuery. Dans d'autres navigateurs (sauf IE) j'obtiens la zone avec toutes les catégories nécessaires, mais dans IE je reçois seulement les nouvelles catégories reçues (qui créent juste DomObject), d'autres vieux objets qui ont gardé l'ancien DomObject n'apparaissent pas.

Je sais qu'il est possible de faire avec innerHTML, mais je ne garderai pas DomObject, pas de texte. Parce que DomObject conserve de nombreux événements. Et c'est très difficile pour les événements attachés au navigateur pour chaque DomObject après la zone d'actualisation.

+0

Avez-vous essayé le clone de jQuery? –

+0

@Kerry Ouais! C'est du travail! Je ne connaissais vraiment pas cette méthode. Mais je pense que ce problème était dans IE, quand il est clair que l'objet ob innerHTML object ici détruit tous les nœuds enfants. Et le détruire dans mon objet) – Kein

+0

Nice) J'ai le prochain problème) Les événements ne clone pas avec la méthode .clone(); – Kein

Répondre

2

Comme les commentaires suggèrent que vous pouvez utiliser .clone() pour cela, pour éliminer votre autre problème, avec des événements ne copiant pas, qui est également couvert. .clone() prend un paramètre booléen, lui indiquant s'il faut copier les données et les événements (c'est à partir de jQuery 1.4, c'était juste des événements, pas des données, avant cela).

Pour utiliser .clone(bool) et obtenir une copie, y compris les gestionnaires d'événements, faites ceci:

return domBlock.clone(true); 
+0

Merci son travail) – Kein