私は に、すなわち、彼らは再構築することができるような方法 で影のホストとシャドウルートの両方を含む文字列をシャドウDOMツリーを含む全体のHTMLのDOMをシリアライズしたいです。
注:shadowRoot
ノードはクローン可能ではありません。 shadowRoot
の各ノードの.nodeValue
または.innerHTML
を取得するには、childNodes
をshadowRoot
で繰り返す必要があります。
var elems = document.getElementById("host").shadowRoot.childNodes;
var shadowHTML = "";
for (var i = 0; i < elems.length; i++) {
shadowHTML += elems[i].nodeValue || elems[i].outerHTML;
}
別の方法としては、shadowRoot
のフルhtml
を取得するためにshadowRoot
の.treeRoot
プロパティに連鎖.innerHTML
を呼び出すことができます。
var shadowHTML = document.getElementById("host").shadowRoot.treeRoot.innerHTML;
私はプログラム的に.shadowRoot.innerHTML 経由シャドウDOMにアクセスすることができますが、全体のDOMに.outerHTMLを呼び出すかのXmlSerializer を使用すると、shadowRootが含まれていません。
あなたはshadowRoot
をホストdocument
内の要素のhtml
を取得するために.host
に呼びかけ.outerHTML
を使用することができます。
var host = document.getElementById("host").shadowRoot.host.outerHTML;
shadowRoot
次いで、<template>
要素を作成ストリング.treeRoot.innerHTML
ある変数shadowHTML
に.innerHTML
を設定することによって再構成することができます。新しく作成されたtemplate
要素をshadowRoot
に追加します。
質問で試した 'html'、' js'を含めることができますか? – guest271314