gpt4 book ai didi

javascript - 永远不会显示 "unnamed"插槽上的回退内容

转载 作者:行者123 更新时间:2023-11-30 11:12:20 30 4
gpt4 key购买 nike

我试图弄清楚 Web 组件是如何工作的,但无法完全理解插槽中回退内容的规则:

我有一个像这样的网络组件:

const template = document.createElement('template');
template.innerHTML = `
<slot name="content">
<span>fallback</span>
</slot>
<slot>
<span>fallback on an anonymus slot</span>
</slot>
<section>...and more content form shadow DOM</section>
`;

class SomeComponent extends HTMLElement{
constructor() {
super();

const shadowRoot = this.attachShadow({mode: 'open'});
shadowRoot.appendChild(template.content.cloneNode(true));
}
}

window.customElements.define('some-component', SomeComponent);

如果我把这个组件放在像这样的页面上

<some-component>
<span slot="content">named slot content</span>
</some-component>

我从来没有看到未命名插槽的“后备”内容:

enter image description here

但它确实存在于影子 DOM 中:

enter image description here

我不使用任何 pollyfills 并依赖当前的 Chrome 网络组件支持

最佳答案

这是预期的行为。实际上回退不会被显示,因为一些元素被未命名的 <slot> 捕获和显示。元素:space 之前的(不可见 CRLF<span> )文本元素在 </span> 之后标签。

如果删除它们:

<some-component><span slot="content">named slot content</span></some-component>

...然后您将看到后备文本!

const template = document.createElement('template');
template.innerHTML = `
<slot name="content">
<span>fallback</span>
</slot>
<slot>
<span>fallback on an anonymus slot</span>
</slot>
<section>...and more content form shadow DOM</section>
`;

class SomeComponent extends HTMLElement{
constructor() {
super();

const shadowRoot = this.attachShadow({mode: 'open'});
shadowRoot.appendChild(template.content.cloneNode(true));
}
}

window.customElements.define('some-component', SomeComponent);
<some-component><span slot="content">named slot content</span></some-component>

关于javascript - 永远不会显示 "unnamed"插槽上的回退内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53182353/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com