ShadowRoot: slotAssignment 属性

Baseline 已广泛支持

此功能已成熟,并可在许多设备和浏览器版本上运行。自 2023 年 3 月以来,它已在各种浏览器中可用。

ShadowRoot 接口的只读 slotAssignment 属性会返回 Shadow DOM 树的插槽分配模式。节点会被自动分配(named)或手动分配(manual)。该属性的值是在调用 Element.attachShadow() 时使用 slotAssignment 选项定义的。

一个字符串,可以是以下值之一:

named

元素会被自动分配到此 Shadow Root 中的 <slot> 元素。宿主(host)中带有 slot 属性的任何后代,且该属性值匹配此 Shadow Root 中 <slot> 元素的 name 属性,都将被分配到该插槽。宿主中任何没有 slot 属性的顶层子元素,如果存在一个没有 name 属性的 <slot>(即“默认插槽”),则会被分配到该插槽。

manual

元素不会自动分配到 <slot> 元素。相反,它们必须使用 HTMLSlotElement.assign() 手动分配。

示例

在下面的示例中,assign() 方法用于显示制表应用程序中的正确选项卡。该函数被调用并传入要显示的面板,然后该面板被分配到插槽。我们测试 slotAssignment 是否为 named,以防止在调用 HTMLSlotElement.assign() 时引发异常。

js
function UpdateDisplayTab(elem, tabIdx) {
  const shadow = elem.shadowRoot;

  // This test is usually not needed, but can be useful when debugging
  if (shadow.slotAssignment === "named") {
    console.error(
      "Trying to manually assign a slot on an automatically-assigned (named) slot",
    );
  }
  const slot = shadow.querySelector("slot");
  const panels = elem.querySelectorAll("tab-panel");
  if (panels.length && tabIdx && tabIdx <= panels.length) {
    slot.assign(panels[tabIdx - 1]);
  } else {
    slot.assign();
  }
}

规范

规范
DOM
# dom-shadowroot-slotassignment

浏览器兼容性

另见