cloneNode は、指定された dom ノードのコピーを作成するために使用される HtmlElement プロトタイプ チェーンのメソッドです。 include_all が true に設定されている場合、コピーには指定されたノードのすべての子ノードが含まれます。
ただし、script タグも dom ノードであり、cloneNode は依然として有効です。さまざまなブラウザ (特に IE) で cloneNode の実行結果が不一致になることが測定されています。主な現象は次の 2 つです。 :
IE、少なくとも IE8 以下では、ノードのクローンを作成するときに、ノードにスクリプト ノードが含まれている場合、スクリプト ノードのスクリプト コンテンツが再度実行される可能性があります。
IE 以外のブラウザの場合、cloneNode ノードに含まれるスクリプト ノードのスクリプト コンテンツは再度実行されません。
IE 以外のブラウザのパフォーマンスには非常に満足しています。上記の IE の「可能性」については、次の 2 つの状況があります。
cloneNode がスクリプト ノードの場合、ノードがスクリプト ノードであるかどうかは関係ありません。外部リンク スクリプトも埋め込みスクリプトも再度実行されることはありません。
別のノードを cloneNode すると、そのノードの下に含まれる埋め込みスクリプトは実行されませんが、含まれる外部リンク スクリプトは再度実行されます。
これは IE で cloneNode の問題を再現するデモです。
これを見たらめまいがしませんか?解決策は非常に簡単で、どのブラウザであっても、ノードをクローンする前にターゲット ノードにあるすべてのスクリプト タグを削除するだけです。スクリプトはすでに実行されているため、次のようにタグを削除しても影響はありません。 🎜>