将元素升级为自定义元素
Upgrade an element to a custom element
我正在尝试将普通元素升级为自定义元素。这个例子不起作用,所以也许这是不可能的?
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>
有 3 种类型的元素:
标准元素
自主自定义元素(从 HTMLElement 扩展)
自定义内置元素(从标准元素扩展)
is
属性不是您的常规元素属性。
你不能在定义后 change/setAttribute("is",...) 元素到其他东西。
is
属性在元素由 DOM 解析器创建时使用,而不是在 DOM 突变上使用。
Safari不支持自定义元素,Apple 已声明它们永远不会。
来源:https://github.com/WICG/webcomponents/issues/509
你可以试试Polyfill,
或者只是不使用它们,并坚持使用自治元素(扩展 HTMLElement)。
请注意,所有基类,Lit、Hybrids、Stencil 等,都从 HTMLElement 扩展而来,
他们不做定制的内置元素
如果您继续使用自定义元素(不适用于 Safari),请注意:
document.body.append(
document.createElement("IMG", { is: "white-queen" })
);
正确创建自定义内置DOM元素,
但它 没有设置 DOM 元素的 is
属性。
所以如果你需要它作为 CSS select 或者你必须自己明确设置它。
document.body.appendChild(
document.createElement("IMG", { is: "white-queen" })
).setAttribute("is", "white-queen");
这就允许 CSS select 或 [is=*"white"]
到 select 全白棋子。 partial 标签名称是不可能的。
我所有的实验都在:https://chessmeister.github.io/
从那以后我就再也没有使用过自定义内置元素。
我正在尝试将普通元素升级为自定义元素。这个例子不起作用,所以也许这是不可能的?
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>
有 3 种类型的元素:
标准元素
自主自定义元素(从 HTMLElement 扩展)
自定义内置元素(从标准元素扩展)
is
属性不是您的常规元素属性。
你不能在定义后 change/setAttribute("is",...) 元素到其他东西。
is
属性在元素由 DOM 解析器创建时使用,而不是在 DOM 突变上使用。
Safari不支持自定义元素,Apple 已声明它们永远不会。
来源:https://github.com/WICG/webcomponents/issues/509
你可以试试Polyfill,
或者只是不使用它们,并坚持使用自治元素(扩展 HTMLElement)。
请注意,所有基类,Lit、Hybrids、Stencil 等,都从 HTMLElement 扩展而来,
他们不做定制的内置元素
如果您继续使用自定义元素(不适用于 Safari),请注意:
document.body.append(
document.createElement("IMG", { is: "white-queen" })
);
正确创建自定义内置DOM元素,
但它 没有设置 DOM 元素的 is
属性。
所以如果你需要它作为 CSS select 或者你必须自己明确设置它。
document.body.appendChild(
document.createElement("IMG", { is: "white-queen" })
).setAttribute("is", "white-queen");
这就允许 CSS select 或 [is=*"white"]
到 select 全白棋子。 partial 标签名称是不可能的。
我所有的实验都在:https://chessmeister.github.io/
从那以后我就再也没有使用过自定义内置元素。