javascript - 如何序列化包含 Shadow DOM 的 HTML DOM?

标签 javascript html dom shadow-dom

我想将包括影子 DOM 树在内的整个 HTML DOM 序列化为一个字符串,即以可以重构的方式同时包含影子主机和影子根。

我可以通过 .shadowRoot.innerHTML 以编程方式访问 Shadow DOM,但在整个 DOM 上调用 .outerHTML 或使用 XMLSerializer 不包括 shadowRoot。

有没有办法序列化整个 HTML 文档,包括 Shadow DOM 树?

最佳答案

I want to serialize an entire HTML DOM including Shadow DOM trees into a string i.e. including both the shadow host and shadow root in a way that they can be reconstructed.

请注意,shadowRoot节点不可克隆;虽然你应该能够迭代 childNodesshadowRoot检索 .nodeValue.innerHTML 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;
}

或者您可以调用 .innerHTML链接到 .treeRoot shadowRoot的属性(property)检索完整 htmlshadowRoot .

var shadowHTML = document.getElementById("host").shadowRoot.treeRoot.innerHTML;

I can programatically access the Shadow DOM via .shadowRoot.innerHTML but calling .outerHTML on the entire DOM or using an XMLSerializer does not include the shadowRoot.

您可以使用 .outerHTML调用.host检索 html document 内的元素哪个主机 shadowRoot .

var host = document.getElementById("host").shadowRoot.host.outerHTML;

shadowRoot然后可以通过创建 <template> 来重建元素,设置 .innerHTML到变量 shadowHTML这是字符串 .treeRoot.innerHTML ;附加新创建的 template元素到 shadowRoot .

关于javascript - 如何序列化包含 Shadow DOM 的 HTML DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37016564/

相关文章:

php - 隐藏字段值未出现在查询字符串中

javascript - AngularJS:同步从javascript调用 Angular Controller 中的方法

javascript - 使用 jQuery 查找和替换元素的类

javascript - 如何在 mootools 上实现 jQuery 实时绑定(bind)事件?

java - 将 DOM 文档导出为 XML,并将 userData 作为属性

javascript - 如何在 webpack 中设置 file-loader 的特定前缀?

Javascript for 循环返回 "copy"作为值

jquery - 如何通过将下拉 div 放置在相关控件的上方或下方来在屏幕上显示?

html - 无法在 Firefox 中将 SVG 绘制到 HTMl5 Canvas (即使设置了高度和宽度)

javascript - 使用 greasemonkey 和/或 gmail API 来减少邮件 Pane 的宽度