gpt4 book ai didi

javascript - 如何防止 Slotted HTML 元素呈现,直到它位于 shadowRoot 内?

转载 作者:行者123 更新时间:2023-12-01 16:26:33 26 4
gpt4 key购买 nike

我有一个非常简单的网站,类似于 jsfiddle .一切似乎都很好,但在我的本地,但是当我停在第一行 JS 时(在声明自定义元素之前)我可以看到没有格式的 div ......

<jrg-test>
<div slot="test">
This should work
</div>
</jrg-test>

connectedCallback() {
console.log("Ok we are working")
this.shadowRoot.innerHTML = "<slot name='test'></slot>"
const element = document.createElement('style');
element.textContent = "::slotted(*){background-color:red;color:white;}";
this.shadowRoot.appendChild(element);
}

所以基本上如果我在呈现自定义元素之前停止,我会看到原始 div。我知道有一些涉及定位和 CSS 的 hacky 解决方案,但是否有更清洁的解决方案。可能一个我可以专门在 JS 中实现?

所以主要问题是如何隐藏 This should work文本直到应用了红色背景和白色?

最佳答案

也许您可以尝试使用 :defined CSS 伪类在定义时隐藏自定义元素。

请参见下面的示例:

class TestElement extends HTMLElement{
constructor(){
super();
console.log("Attaching the shadow")
this.attachShadow({mode:'open'})
}
connectedCallback() {
console.log("Ok we are working")
this.shadowRoot.innerHTML = `<style>
::slotted(*){background-color:red;color:white;}
</style>
<slot name='test'></slot>`
}
}
upgrade.onclick = () => customElements.define("jrg-test", TestElement)
jrg-test:not(:defined) {
display:none
}
<jrg-test>
<div slot="test">This should work</div>
</jrg-test>

<button id="upgrade">upgrade</button>

关于javascript - 如何防止 Slotted HTML 元素呈现,直到它位于 shadowRoot 内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029748/

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