2011-07-10 29 views
2

私はelem.removeChild()を使用してドキュメントから要素を削除しましたが、適切なときにそれらを追加できるように、その要素へのJavaScript参照を保存しています。 FirefoxとChromeでうまく動作します。Internet ExplorerとremoveChild()

IE7では、これらの要素がプロセスで破棄され、すべての子が削除されていることがわかりました。それらを同じ親要素に戻すと、それらは同じ型の要素であり、クラス名のようなものは保持されますが、子要素はありません。

これが期待どおりの動作ですか?アプリを変更して別のことをすることができることは分かっていますが、それには数時間のリワークが必要です。私はそれを避けたいと思っています。私はいつも要素を削除することをお勧めします。removeChild()を使用するか、親のinnerHTMLを空の文字列に設定し、要素への参照を持っている限り(つまり変数が要素を指しているだけでなく要素ID)、要素を混乱させることなく自由に要素を追加したり削除したりできました。

これはIEのバグですか、私は何とか混乱していますし、何か他のことが起こっているのですか?

+6

予期せぬことがInternet Explorer 7であることを期待してください。 – Pointy

+1

removeChildの仕様では、削除するノードの子ノードをそのノードと一緒に保持する必要があるとは明示的には言いませんが、 FFとChromeの開発者が決めたもの親のinnerHTMLが空の文字列に設定されている場合、仕様が何をするのか分かりませんが、私の意見では、「そこにあったものをすべて拭き取ってください」というような感じです。削除された要素のコードへの参照があったとしても、ブラウザはそのinnerHTMLにあったものをすべて破棄します。 – nnnnnn

+0

@nnnnnnコメントでない場合は、私はあなたの答えを受け入れるだろう。 removeChildは本当に要素を破壊するわけではなく、innerHTMLを ''に設定するだけです。 – rob

答えて

1

removeChildの仕様では、削除されるノードの子ノードがそのノードと一緒に保管されるべきであると明示的には言われていませんが、FFとChromeの開発者が決定した。親のinnerHTMLが空の文字列に設定されている場合、仕様が何をするのか分かりませんが、私の意見では、「そこにあったものをすべて拭き取ってください」というような感じです。削除された要素のコードへの参照があったとしても、ブラウザはそのinnerHTMLにあったものをすべて破棄します。

0

あなたの実装をもっと見ることなく、私はあなたが盲目的な答え以上のものを得ることは確かではありません。ここをクリックしてください:

テーブル行で作業していますか? this answer をチェックしてください。明らかに<tr><table>に直接接続するのではなく、IEで<tbody>に接続する必要があります。

+0

これは問題ではありません。 – rob

+0

質問に 'code'を追加すると、私はそれに答えることができます。 – twip

+0

ええ、私はそれが解決されたと思います。innerHTMLを ''に設定すると、文書から要素を削除する以上のことが行われ、内容が破棄されます。 (IEのみ)。しかし、ありがとう。 – rob