【发布时间】:2021-03-25 09:47:39
【问题描述】:
是否有任何约束阻止 <thead>、<tbody>、<tr> 等插入影子 DOM?
举个例子:
<script>
class Table extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: 'open'}).innerHTML = `
<table>
<thead>
<slot name="header"></slot>
</thead>
<tbody>
<slot name="row"></slot>
</tbody>
</table>
`;
}
}
window.customElements.define('data-table', Table);
</script>
<data-table>
<tr slot="header">
<th>header1</th>
</tr>
<tr slot="row">
<td>cell1</tr>
</tr>
</data-table>
解决方法是使用模板并在 slotchange 事件处理程序中插入带有 JS 的模板内容,但我想避免这种情况,因为克隆的内容最终会出现在影子 DOM 中,并且无法覆盖来自在自定义元素之外。
【问题讨论】:
-
<tr>需要<table>父级。所以在这个用例中更好地解析 lightDOM 并将它们注入到表中 -
这与影子 DOM 无关。
<thead>、<tbody>和<tfoot>只允许<tr>s 作为子元素。 -
不幸的是,@Andreas 是对的,w3.org/TR/html52/tabular-data.html#the-table-element - 表不允许
<slot>作为其子级或其任何后代的子级。
标签: javascript html web-component shadow-dom