自定义 Web 组件 - 如何将它附加到 <body> 的开头,而不管该组件在何处使用?
Custom Web Component - How can I append it to the beginning of the <body> regardless of where the component is used?
一个用例是创建自定义页面警报组件
<page-alert data-alertHeading='You are in danger' data-alertInfo ="This is a description of why you are in danger.">
</page-alert>
通常,模板化的 HTML 将添加到页面中使用组件代码的地方:
this.attachShadow({mode: 'open' });
this.shadowRoot.appendChild(template.content.cloneNode(true));
不过,我想将此自定义组件附加到正文中,以便它成为开始正文标记之后的第一个元素,并且始终出现在页面顶部。我怎样才能做到这一点?
从您的组件内部:
document.body.insertBefore(this, document.body.firstChild);
// or, for evergreen browsers, if you don't care about IE:
document.body.prepend(this);
从外部看,如果您的元素已经在 DOM 但需要移动:
document.body.insertBefore(document.querySelector('page-alert'), document.body.firstChild);
// or, for evergreen browsers, if you don't care about IE:
document.body.prepend(document.querySelector('page-alert'));
一个用例是创建自定义页面警报组件
<page-alert data-alertHeading='You are in danger' data-alertInfo ="This is a description of why you are in danger.">
</page-alert>
通常,模板化的 HTML 将添加到页面中使用组件代码的地方:
this.attachShadow({mode: 'open' });
this.shadowRoot.appendChild(template.content.cloneNode(true));
不过,我想将此自定义组件附加到正文中,以便它成为开始正文标记之后的第一个元素,并且始终出现在页面顶部。我怎样才能做到这一点?
从您的组件内部:
document.body.insertBefore(this, document.body.firstChild);
// or, for evergreen browsers, if you don't care about IE:
document.body.prepend(this);
从外部看,如果您的元素已经在 DOM 但需要移动:
document.body.insertBefore(document.querySelector('page-alert'), document.body.firstChild);
// or, for evergreen browsers, if you don't care about IE:
document.body.prepend(document.querySelector('page-alert'));