2009-08-05 11 views
1

J'ai un div qui doit être déplacé d'un endroit à l'autre dans le DOM. Donc, au moment où je le fais comme ceci:appendChild dans IE6/IE7 ne fonctionne pas avec les éléments existants

flex.utils.get('oPopup_About').appendChild(flex.utils.get('oUpdater_About')); 

Mais, IE, étant, bien, IE, il ne fonctionne pas. Cela fonctionne tous les autres navigateurs, mais pas dans IE.

Je dois le faire de cette façon que l'élément (div) 'oUpdater_About' doit être réutilisé car il est peuplé encore et encore.

Donc, j'ai juste besoin de pouvoir déplacer le div autour du DOM, appendChild laissera cela se produire dans tous les navigateurs, mais, IE.

Merci d'avance!

+0

appendChild a toujours travaillé dans IE pour moi. Etes-vous sûr que "flex.utils.get" renvoie un noeud DOM Element réel plutôt qu'un objet de type nœud spécifique à la bibliothèque? – NickFitz

+0

Certainement, c'est juste un wrapper pour un script document.getElementById. J'ai essayé de le remplacer par document.getElementById, même problème. Le problème pourrait-il être que je ne crée pas l'élément à la volée? Cela existe déjà dans l'onload DOM. En théorie, ça ne devrait pas! Mais vous connaissez IE. – jamesmhaley

+0

Je n'ai jamais rencontré ce problème; IE a toujours fonctionné correctement pour moi, en supprimant l'élément de son parent existant et en l'ajoutant au nouveau parent. Essayez d'obtenir les deux nœuds dans les variables avant de faire l'appendice afin que vous puissiez utiliser alert() (ou votre outil de débogage préféré), juste pour être sûr que vous obtenez ce que vous pensez obtenir. – NickFitz

Répondre

2

Vous devez supprimer le nœud premier, avant de pouvoir l'ajouter nulle part ailleurs. Un nœud ne peut pas être à deux endroits en même temps.

var node = flex.utils.get('oUpdater_About') 
node.parentNode.removeChild(node); 
flex.utils.get('oPopup_About').appendChild(node); 
+0

Salut les gars, merci pour votre aide! – jamesmhaley

+1

Êtes-vous sérieux? c'est farfelu! vous n'avez pas besoin de le faire avec une manipulation DOM régulière. Est-ce que le wrapper Flex appelle le même code dans IE par rapport aux autres navigateurs? – scunliffe

+0

@ scunliffe: Je n'ai trouvé aucun indice quant à savoir si vous pouvez ou non ré-ajouter un noeud qui est déjà ajouté quelque part dans le DOM. Avez-vous une source qui pourrait éclaircir ça pour moi? –

1

assurez-vous de cloner le oUpdater_About (avec node.cloneNode (true)) cette façon, vous obtenez une copie et peut réutiliser le dom-extrait aussi souvent que vous le souhaitez (dans un navigateur)

+0

Je pense que vous avez peut-être manqué la partie où sparkyfield a dit qu'il voulait * déplacer * les éléments, pas * les copier *. –

+0

Voilà Jason, le clonage de l'élément signifiera que j'ai des ID et des éléments qui se contredisent. J'ai besoin d'un élément, d'être déplacé, pas copié. Merci – jamesmhaley

0

Ce poste tend de suggérer qu'il ya effectivement un problème avec appendChild par rapport à ceci:

http://metadeveloper.blogspot.com/2007/01/ie-7-appendchild-bug.html

Avez-vous essayé le clonant, l'enlever, puis insérer le clone à la place?

James

+1

Oui, c'est un autre plaisir dans IE. Vous devez ajouter TR à un TBODY dans IE. Tenter de les ajouter directement à la table échouera. – scunliffe