外部ドキュメントからノードのコピーを作成し、現在のドキュメントに挿入できるようにします。
構文
var node = document.importNode(externalNode, deep);
node
- ドキュメントにインポートされた新しいノードです。この新しいノードはまだドキュメントツリーに挿入されていないので、
parentNode
はnull
です。 externalNode
- インポートする対象となる他のドキュメントのノードです。
deep
- ノードの子をインポートする必要があるかを示す真偽値です。
補足: DOM4 仕様 (Gecko 13.0 (Firefox 13 / Thunderbird 13 / SeaMonkey 2.10) に実装) では、deep
は任意の引数です。省略した場合、メソッドは deep
の値に true
が設定されたものとして動作し、ディープクローンが既定の動作になります。シャロークローンを作成するには、deep
に false
を設定しなければなりません。
この振る舞いは、最新仕様で変更されました。省略した場合、deep
の値に false
が設定されたものとして動作します。このオプションは依然として任意ですが、後方または前方互換性のため、deep
引数に値を設定すべきです。Gecko 28.0 (Firefox 28 / Thunderbird 28 / SeaMonkey 2.25 / Firefox OS 1.3) で、開発者は引数を省略すべきでないという警告がコンソールに表示されます。Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) 以降、ディープクローンの代わりにシャロークローンが既定の動作になりました。
例
var iframe = document.getElementsByTagName("iframe")[0]; var oldNode = iframe.contentWindow.document.getElementById("myNode"); var newNode = document.importNode(oldNode, true); document.getElementById("container").appendChild(newNode);
注記
インポート元のノードは元のドキュメントから削除されません。インポートされるノードは、元のノードのクローンです。
外部ドキュメントからのノードは、現在のドキュメントに挿入する前に document.importNode()
を使ってクローンを作る (あるいは
document.adoptNode()
を使って取り込む) べきです。Node.ownerDocument
問題の詳細については
W3C DOM FAQ を参照してください。
Firefox では現在このルールを強制していません。Firefox 3 の開発中には強制していた時期もありましたが、このルールを強制すると多くのサイトが機能しなくなってしまうため取りやめになりました。 将来的な互換性を高めるため、Web 開発者にはこのルールに従ってコードを修正することを推奨します。
仕様
仕様書 | 策定状況 | コメント |
---|---|---|
DOM document.importNode() の定義 |
現行の標準 | |
Document Object Model (DOM) Level 2 Core Specification document.importNode() の定義 |
勧告 | 初期定義 |
ブラウザの実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
DOM 2 バージョン | (有) | 1.0 (1.7 or earlier) | 9.0 | 9.0 | (有) |
DOM 4 バージョン ( deep optional) |
(有) | 10 (10) | 未サポート | 未サポート | Nightly build |
機能 | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
DOM 2 バージョン | ? | 1.0 (1) | ? | ? | ? |
DOM 4 バージョン ( deep optional) |
? | 10.0 (10) | ? | ? | ? |