2009-08-05 5 views
1

Ich habe ein Div, das von einem Ort zum anderen im DOM verschoben werden muss. Also im Moment mache ich es wie so:AppendChild in IE6/IE7 funktioniert nicht mit vorhandenen Elementen

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

Aber, IE, sein, gut, IE, funktioniert es nicht. Es funktioniert alle anderen Browser, nur nicht in IE.

Ich muss es so tun, wie das Element (div) 'oUpdater_About' muss wiederverwendet werden, da es wieder und wieder besiedelt wird.

Also ich muss nur in der Lage sein, die div um das DOM zu bewegen, appendChild wird dies in allen Browsern passieren, aber, IE.

Vielen Dank im Voraus!

+0

appendChild hat immer in IE für mich gearbeitet. Sind Sie sicher, dass "flex.utils.get" einen tatsächlichen DOM-Element-Knoten und nicht ein bibliotheksspezifisches knotenähnliches Objekt zurückgibt? – NickFitz

+0

Definitiv ist das nur ein Wrapper für ein document.getElementById-Skript. Ich habe versucht, es durch document.getElementById, dasselbe Problem zu ersetzen. Könnte das Problem sein, dass ich das Element nicht im laufenden Betrieb erstelle? Dass es bereits im DOM-Onload existiert. In der Theorie sollte es nicht! Aber du kennst IE. – jamesmhaley

+0

Ich bin nie auf dieses Problem gestoßen; IE hat immer richtig für mich gearbeitet, das Element von seinem vorhandenen Elternteil entfernend und es an den neuen Elternteil angehängt. Versuchen Sie, beide Knoten in Variablen zu bringen, bevor Sie sie anhängen, damit Sie alert() (oder Ihr bevorzugtes Debugging-Tool) verwenden können, nur um sicher zu gehen, dass Sie das bekommen, was Sie zu haben glauben. – NickFitz

Antwort

2

Sie haben den Knoten zuerst zu entfernen, bevor Sie es anderswo anhängen können. Ein Knoten darf nicht gleichzeitig an zwei Stellen sein.

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

Prost Jungs, vielen Dank für Ihre Hilfe! – jamesmhaley

+1

Meinst du das ernst? das ist verrückt! Sie müssen dies nicht mit der regulären DOM-Manipulation tun. Ruft der Flex Wrapper denselben Code in IE vs. anderen Browsern darunter auf? – scunliffe

+0

@scunliffe: Ich habe keine Hinweise gefunden, ob Sie einen Knoten, der bereits irgendwo im DOM angehängt ist, erneut anhängen können oder nicht. Haben Sie eine Quelle, die das für mich klären könnte? –

1

stellen Sie sicher, die oUpdater_About (mit node.cloneNode (true)) diese Weise können Sie eine Kopie erhalten zu klonen und wie oft die dom-Schnipsel wieder verwenden können, wie Sie (in jedem Browser) wollen

+0

Ich denke, Sie haben den Teil vermisst, wo Sparkyfield gesagt hat, dass er Elemente * bewegen * möchte, nicht * kopieren * sie. –

+0

Das ist es Jason, klonen das Element wird bedeuten, dass ich IDs und Element kollidieren. Ich brauche ein Element, um bewegt zu werden, nicht kopiert. Dank – jamesmhaley

0

Dieser Beitrag dazu neigt, zu vermuten, dass es mit appendChild mit Bezug auf das in der Tat ein Problem ist:

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

Haben Sie versucht, es klonen, zu entfernen es dann stattdessen den Klon Einfügen?

James

+1

Ja, das ist ein weiterer Spaß in IE. Sie müssen TRs an einen TBODY in IE anhängen. Der Versuch, sie direkt an TABLE anzuhängen, schlägt fehl. – scunliffe

Verwandte Themen