【发布时间】:2021-11-05 19:00:57
【问题描述】:
我正在尝试将普通元素升级为自定义元素。这个例子不起作用,所以也许这是不可能的?
customElements.define('html-h1-heading-element', class extends HTMLHeadingElement {
constructor() {
super();
}
connectedCallback() {
console.log('Hello from custom element');
}
}, {
extends: 'h1'
});
const el = document.querySelector('h1');
el.setAttribute('is', 'html-h1-heading-element');
console.log(el);
<h1>Hello, world</h1>
【问题讨论】:
-
好的,你想做什么?将页面上的现有元素动态更改为自定义元素?现在您已经展示了an XY problem,因为
is并不是唯一决定它是哪种元素的东西。并且 JS 中对象的类型不是由它们的属性决定的——如果你有一个对象并为其添加属性使其匹配class Foo,则该对象不会动态更改为Foo的实例。 -
@VLAZ 我有一个自定义元素扩展了
h1。添加is属性是您通常执行此操作的方式。我不想在代码中手动添加它,而是使用 javascript 添加它。你对我想要做什么有更清楚的了解吗? -
你可以做的是获取
h1的内容,用这个内容创建你的自定义html-h1-heading-element。然后用你的新元素替换h1。 -
然后使用replaceWith(IE11不支持)
-
我认为我们无法使用脚本将普通元素升级为自定义元素。但如果我们在 html 中设置硬编码的
<h1 is="html-h1-heading-element">Hello, world</h1>,它确实有效。检查:mdn.github.io/web-components-examples/word-count-web-component