DOSEIの日記

技術メモ+日常ログ

Textノードを追加できない

IE6
Microsoft.XMLHTTP オブジェクトを作って、responseXMLXML のオブジェクトを取得し、getElementsByTagName で適当な要素を拾って、その Text ノードを getChildNodes でとってくる。
これを、実行中の HTML の要素に appendChild しようとすると、「インターフェースがサポートされていません」というエラーで止まる。

んー…。

ちょっと考えて、これだとノードの移動になるからだめなのかと思って、 cloneNode してみたけど、やっぱりだめ。

Firefox だとうまくいくのになぜー?

しょうがないから、一度 nodeValue で文字列取り出して、createTextNode で再作成という二度手間…。

原因と解決策

異なるドキュメント間のノードの移動・コピーは appendChildcloneNode などではできない仕様らしい。 Firefox 2.x ではエラーは出ないが、 Firefox 3.x では Node cannot be used in a document other than the one in which it was created とエラーが出るようになっている。

で、一方のドキュメントから他方に移動する adoptNode (DOM3 Core) とコピーする importNode (DOM2 Core) を使えばいい。

Firefox 2 でも実装されているのでうまくいく。 IE6 だとどちらにせよ動かない。やはり、文字列のコピーをするほうがいいか。