Document.adoptNode()

Document.adoptNode() は、ノードを他の文書からメソッドの文書へ移動します。取り込まれたノードおよびそのサブツリーは (もしあれば) 元の文書から削除され、 ownerDocument が現在の文書に変更されます。その後、ノードを現在の文書に挿入することができます。

構文

node = document.adoptNode(externalNode);

引数

node
この文書に取り込まれ、 ownerDocument がこの文書になったノードです。このノードはまだ文書ツリーに挿入されていないので、 parentNodenull です。なお、この呼び出しの後では nodeexternalNode は同じノードになります。
externalNode
他の文書から取り込まれるノードです。

var iframe = document.querySelector('iframe');
var iframeImages = iframe.contentDocument.querySelectorAll('img');
var newParent = document.getElementById('images');

iframeImages.forEach(function(imgEl) {
  newParent.appendChild(document.adoptNode(imgEl));
});

メモ

外部の文書から取り込まれるノードは、現在の文書に挿入する前に document.importNode() を使用して複製してください (または document.adoptNode() を使用して取り込んでください)。 Node.ownerDocument の問題について詳しくは、 W3C DOM FAQ を参照してください。

Firefox は現在のところ、この規則を強制しません (Firefox 3 の開発中は強制していましたが、この規則を強制するとあまりに多くのサイトが壊れました)。今後の互換性を高めるために、ウェブ開発者はこの規則に従うようコードを修正することをお勧めします。

仕様書

ブラウザーの対応

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
adoptNodeChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 ありIE 完全対応 9Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 ありOpera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android ?

凡例

完全対応  
完全対応
実装状況不明  
実装状況不明

関連情報