Web 组件:如何查询插槽的子项

Web component: How to query children of a slot

假设我有一个本机 Web 组件,它有一个插槽:

    <slot id="CONTENT_SLOT" name="content"></slot>

const CONTENT_SLOT = this.shadowRoot.getElementById("CONTENT_SLOT") 找到元素,但 CONTENT_SLOT.children 为空。

this.shadowRoot.querySelectorAll('[slot="content"]') returns 也是一个空节点列表。

document.querySelectorAll('[slot="content"]') 在插槽中查找项目,但对于所有 Web 组件。

如何只获取当前 Web 组件实例的 content 槽中元素的 NodeList?

想通了:

this.querySelectorAll('[slot="content"]')

您可以使用 assignedElements() 获取分配给插槽的元素。

this.shadowRoot.querySelector('#CONTENT_SLOT').assignedElements();

这样做与 this.querySelectorAll('[slot="content"]') 的区别在于,您获得的是实际位于插槽中的元素,而不是具有 slot 属性的元素。不是 custom-element 的直接子元素但具有属性的元素将不会出现在 <slot> 中,但它们会在 this.querySelectorAll('[slot="content"]').

中找到