【发布时间】:2022-09-13 14:28:07
【问题描述】:
我正在尝试创建一个扩展 HTMLTableElement 类的自定义 Web Component。代码比较简单:
class DataTable extends HTMLTableElement {
constructor() {
super();
this.data = JSON.parse(decodeURIComponent(this.getAttribute(data)));
const head = this.createTHead();
}
}
customElements.define('data-table', DataTable, {extends:'table'});
当我尝试调用createTHead() 时出现错误。根据文档,这是HTMLTableElement(我的类扩展)的一个函数,并返回一个HTMLTableSectionElement 对象。但是,我收到标题中所述的错误:createTHead called on an object that does not implement interface HTMLTableElement
我期待创建HTMLTableSectionElement,但我得到了错误。我试图从define 调用中删除选项,但出现“非法构造函数”错误。
【问题讨论】:
-
仅供参考,Apple 自 2016 年以来就表示他们永远不会实施这些定制的内置元素.所以自治元素(扩展 HTMLElement)是 Safari 浏览器支持的全部。当您将 DOM 创建移动到
connectedCallback时,您的错误可能已修复参见图表:andyogo.github.io/custom-element-reactions-diagram -
@Danny'365CSI'Engelman 不,他们只是没有使用
is="data-table"。 -
@connexo,所以你说 Safari做支持定制的内置元素只是没有
is? -
@Danny'365CSI'Engelman 不,它用一个小的 polyfill 支持它们。我的消息是回复当您将 DOM 创建移动到 connectedCallback 时,您的错误可能已修复
标签: javascript web-component custom-element