1
我試圖創建一個自定義的錶行,但有困難得到它正確的行爲。我已經嘗試了以下兩種方法,他們給出了奇怪的結果。我意識到,如果沒有自定義元素,這很容易,但這是一個更大項目的小例子。我可以改變什麼來達到預期的效果?創建自定義錶行
class customTableRow extends HTMLElement {
constructor(){
super();
var shadow = this.attachShadow({mode: 'open'});
this.tableRow = document.createElement('tr');
var td = document.createElement('td');
td.innerText = "RowTitle";
this.tableRow.appendChild(td);
var td2 = document.createElement('td');
td2.innerText = "RowContent";
td2.colSpan = 4;
this.tableRow.appendChild(td2);
shadow.appendChild(this.tableRow);
}
}
customElements.define('custom-tr', customTableRow);
//Attempt 2
var newTr = new customTableRow;
document.getElementById('table2Body').appendChild(newTr);
td {
border: 1px solid black;
}
<span>Attempt 1:</span>
<table>
<thead>
<tr>
<th>One</th>
<th>Two</th>
<th>Three</th>
<th>Four</th>
<th>Five</th>
</tr>
</thead>
<tbody>
<custom-tr />
</tbody>
</table>
<hr>
<span>Attempt 2:</span>
<table id="table2">
<thead>
<tr>
<th>One</th>
<th>Two</th>
<th>Three</th>
<th>Four</th>
<th>Five</th>
</tr>
</thead>
<tbody id="table2Body">
<!-- It should append here -->
</tbody>
</table>
<hr>
<span>This is how I want it to look:</span>
<table id="table2">
<thead>
<tr>
<th>One</th>
<th>Two</th>
<th>Three</th>
<th>Four</th>
<th>Five</th>
</tr>
</thead>
<tbody>
<tr>
<td>Row Title</td>
<td colspan="4">Row Content</td>
</tbody>
</table>
嗯,我將不得不對此事的看法,並做一些更多的閱讀。我對web dev相當陌生,這可能比我可以咀嚼的東西更大。如果可能的話,通過擴展一個'tr'類來創建一個新類會更容易嗎? – h01001000
這個怎麼做?回顧一下,我似乎可以擴展'HTMLTableRowElement',但我一直沒有找到一種方法來編寫這個沒有拋出'Illegal Constructor'錯誤。 – h01001000
作爲一個例子,溶液2的[此答案](https://stackoverflow.com/a/43086994/4600982)定義V1與填充工具 – Supersharp