2009-08-05 33 views
1

DOMのある場所から別の場所に移動する必要があるdivがあります。だから私はそうのようにそれをやった瞬間に:IE6/IE7のappendChildが既存の要素で動作しない

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

をしかし、IEは、あること、よく、IE、それは動作しません。他のすべてのブラウザで動作しますが、IEでは動作しません。

要素(div)'oUpdater_About'は何度も繰り返し入力されるため、再利用する必要があります。

DOMを囲むようにdivを動かすだけで済むようにする必要があります.AppendChildはこれをすべてのブラウザで行うことができますが、IEです。

ありがとうございます!

+0

appendChildはいつも私のためにIEで働いています。 「flex.utils.get」が、ライブラリ固有のノードのようなオブジェクトではなく、実際のDOM Elementノードを返すことは確かですか? – NickFitz

+0

もちろん、これはdocument.getElementByIdスクリプトの単なるラッパーです。私はdocument.getElementByIdと同じ問題に置き換えようとしました。問題は私がその場で要素を作成していないということでしょうか?それはすでにDOMの負荷に存在しています。理論的にはそうすべきではありません!しかし、あなたはIEを知っています。 – jamesmhaley

+0

私はこの問題に遭遇したことはありません。 IEはいつも正しく機能しています。既存の親から要素を削除し、新しい親に追加します。 appendを実行する前に、両方のノードを変数に入れて、alert()(あるいはあなたの好みのデバッグツール)を使うことができます。 – NickFitz

答えて

2

は、あなたがどこにもそれを追加することができます前に、最初のノードを削除する必要があります。 1つのノードは同時に2つの場所にあることはできません。

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

皆さん、お元気ですね、ありがとう! – jamesmhaley

+1

あなたは深刻ですか?それは変なことです!あなたは通常のDOM操作でそれを行う必要はありません。フレックスラッパーはIEと同じコードを他のブラウザと呼んでいますか? – scunliffe

+0

@scunliffe:DOMのどこかに既に追加されているノードを追加できないか、または追加できないかの手掛かりは見つかりませんでした。 あなたは私のためにそれをクリアできるソースがありますか? –

1

あなたがコピーを取得し、できるだけ頻繁にあなたが(任意のブラウザで)好きなDOM-スニペットを再利用することができ、このよう(node.cloneNode(真)との)oUpdater_About のクローンを作成することを確認してください

+0

私はあなたがsparkyfieldが*要素をコピーするのではなく、*要素を移動させたいと言った部分を見逃したかもしれないと思います。 –

+0

それはJasonです。要素を複製すると、IDと要素が衝突することになります。私は1つの要素が必要です。 ありがとう、 – jamesmhaley

0

この投稿は、傾向がありますこれに関しては、appendChildに問題確かがあることを示唆して:

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

は、あなたは、代わりにクローンを挿入し、それを削除し、それをクローニングしたことがありますか?

ジェームズ

+1

これはIEのもう一つの楽しみです。 IEのTBODYにTRを追加する必要があります。テーブルに直接追加しようとすると失敗します。 – scunliffe

関連する問題