Javascript 如何克隆/复制DOM节点的阴影DOM?

Javascript 如何克隆/复制DOM节点的阴影DOM?,javascript,polymer,vaadin,shadow-dom,Javascript,Polymer,Vaadin,Shadow Dom,我正在尝试使用web API的cloneNode方法克隆表行。在这些表行中是带有一些vaadinweb组件的表数据,这些组件使用shadowdom获取和呈现其数据 使用cloneNode执行此操作时,不会克隆/复制阴影DOM,因此现在我只剩下一些在渲染时没有输出的vaadin组合框 有什么办法克服这个问题吗 使用克隆节点克隆的表格单元格示例: 你知道如何克隆连接了阴影DOM的节点吗?如果你想克隆节点及其子节点,你必须告诉他们。请尝试将cloneNode的deep参数设置为true element

我正在尝试使用web API的cloneNode方法克隆表行。在这些表行中是带有一些vaadinweb组件的表数据,这些组件使用shadowdom获取和呈现其数据

使用cloneNode执行此操作时,不会克隆/复制阴影DOM,因此现在我只剩下一些在渲染时没有输出的vaadin组合框

有什么办法克服这个问题吗

使用克隆节点克隆的表格单元格示例:


你知道如何克隆连接了阴影DOM的节点吗?

如果你想克隆节点及其子节点,你必须告诉他们。请尝试将cloneNode的deep参数设置为true

element.cloneNode(true);

不应克隆卷影dom内容。本例中的web组件负责在创建该元素的新实例时使用JavaScript创建该元素。因此,当您克隆web组件并将其附加到DOM时,它将自己创建影子DOM


这里的问题可能是没有为克隆的元素设置items属性。请注意,ready方法仅对Polymer web组件的第一个实例运行,而不是对所有实例运行。如果您想为每个实例运行一些代码,请使用connectedCallback或构造函数。

您好,谢谢您的回答!我确实将其设置为true,但在我克隆的DOM节点的shadowRoot下没有得到任何结果。这将是一个很好的功能,不必做任何疯狂的递归。一个内置的功能来克隆整个DOM或DOM结构会很好。这正是我为解决这个问题所做的,我将我的所有vaadin组件重新分配了items属性,解决了这个问题。
ready: function() {
        app.addEventListener('xxx-choices-changed', function(event) {
          this.$.xxxlist.items = app.choices['lkp_xxx_id'];
        }.bind(this));
        this.$.xxxlist.items = app.choices['lkp_xxx_id'];
      }
element.cloneNode(true);