Tahukah Anda bahwa HTML Table juga punya API?
(christianheilmann.com)- API HTMLTableElement sudah ada sejak lama, tetapi hampir tidak pernah digunakan sebagai antarmuka bawaan untuk memanipulasi tabel HTML
- Dengan API ini, Anda dapat langsung membuat dan mengakses tbody, thead, tfoot, caption, row, cell, dan lainnya, tanpa perlu me-render ulang seluruh tabel saat ada perubahan
- Contoh kode menunjukkan cara mengubah data array bertingkat menjadi tabel dan menambahkan baris serta sel melalui
insertRow()daninsertCell() - Berbagai manipulasi dimungkinkan, seperti mengakses sel berdasarkan indeks seperti
t.rows[1].cells[1], atau menambahkan baris terakhir denganinsertRow(-1) - Penulis menyebut API ini memiliki potensi perluasan fungsi tabel sebagai struktur data, dan ada ruang untuk menambahkan event atau fitur ekstra seperti pada form
Ikhtisar API tabel HTML
- Kebanyakan developer membuat tabel dengan metode DOM (
createElementdan sejenisnya) atau menyisipkan stringinnerHTML, tetapi cara kedua memiliki risiko keamanan - HTML memiliki API HTMLTableElement lama yang memungkinkan penanganan body, row, cell, header, footer, caption, summary dari tabel
- API ini memungkinkan manipulasi elemen individual tanpa me-render ulang seluruh tabel
Contoh kode: membuat tabel dari array
- Contoh ini mengubah array bertingkat berikut menjadi tabel
[['one','two','three'], ['four','five','six']]
- Tabel dibuat dengan
document.createElement('table'), lalu setiap baris (insertRow) dan sel (insertCell) ditambahkan melalui perulangan - Isi tiap sel ditetapkan dengan
innerText
Mengakses dan mengubah sel
- Sel pada tabel yang sudah dibuat dapat diakses berdasarkan indeks
- Contoh:
t.rows[1].cells[1]→<td>five</td>
- Contoh:
- Baris dan sel juga bisa dihapus atau ditambahkan
- Contoh:
t.insertRow(-1)untuk menambahkan baris di akhir - Buat sel baru dengan
t.rows[2].insertCell(0), lalu isi nilainya denganinnerText = 'foo'
- Contoh:
Keterbatasan API
- Ada aturan indeks yang tidak intuitif, seperti
insertRow(-1) - Tidak ada cara untuk langsung membuat elemen TH, sehingga semua sel diperlakukan sebagai TD
Potensi pengembangan ke depan
- Penulis menyoroti kenyataan bahwa membuat tabel masih terasa merepotkan, dan mengusulkan peninjauan ulang API ini untuk memperluas fungsinya
- Seperti HTML form yang mendapat tambahan formData atau event change, tabel juga bisa diberi event atau fitur tingkat lanjut
- Dengan begitu, tabel dapat memiliki posisi bukan sekadar alat layout, tetapi sebagai struktur data
2 komentar
Sebagai pengembang yang pengalamannya relatif masih sedikit, saya merasa heran melihat tulisan yang membicarakan API yang sudah digunakan sejak awal seolah-olah baru saja "ditemukan".
Komentar Hacker News
Sepertinya banyak orang tidak membaca artikelnya dengan benar Inti tulisan ini bukan tag `` itu sendiri, melainkan antarmuka DOM khusus untuk table Misalnya, metode seperti
HTMLTableElement.prototype.insertRow()atauHTMLTableRowElement.prototype.insertCell()lebih intuitif daripadacreateElement()atauappendChild()Namun, di UI berbasis library seperti React, Svelte, dan Vue, metode seperti ini hampir tidak lagi digunakan Menarik bahwa seperti sintaks HTML,thead,tbody, dantfootbisa dihilangkan dan tetap ditangani secara otomatis Dalam 5 tahun terakhir, saya pernah langsung memakai.insertRow,.insertCell,.createTHead,.rows, dan.cellsdi skrip demo Dari sisi gaya kode, saya rasa memakaiforalih-alihforEach, dan menghilangkan argumen indeks, terlihat lebih rapiSaya ingat pernah memakai API ini sekitar setengah tahun lalu, entah setelah melihat dokumentasi MDN atau karena direkomendasikan AI Properti
rowsdancellssangat praktis untuk mengimplementasikan navigasi keyboard Contoh terkait bisa dilihat di kode ClickHouseIni mirip dengan pembahasan tentang tombol (thread sebelumnya) Sejak sekitar 10~15 tahun lalu, semuanya berubah menjadi ``, sehingga HTML dipakai seperti kotak peralatan UI alih-alih markup semantik
yang netral Sebenarnya saya juga menganggap memisahkandan `` sebagai kesalahan desainSaya pernah memakai API ini saat membuat alat untuk membandingkan gambar Stable Diffusion Karena baris dan kolomnya banyak, tabel harus sering dibuat ulang, tetapi pembaruan DOM lebih lambat dibanding cara membangunnya sekaligus sebagai string Mungkin karena setiap pemanggilan API langsung memperbarui DOM
Ada penjelasan bahwa “seluruh tabel tidak perlu dirender ulang”, tetapi sebenarnya metode DOM standar juga sudah bekerja seperti itu Meski begitu, tetap keren karena bisa mengurangi penelusuran DOM yang membosankan
API form HTML juga perlu ditemukan kembali
Masalah tabel bukan mengisi datanya, melainkan tidak adanya fitur pencarian, pengurutan, dan pemfilteran
Saya tidak paham dengan pernyataan bahwa “API ini sudah ditinggalkan” Saya masih cukup sering memakainya saat membuat tabel HTML
Kode contohnya menarik, tetapi nama variabelnya terlalu disingkat sehingga sulit dibaca Lebih baik memakai nama yang bermakna daripada
b,t,r,c(ri, i)justru lebih membingungkan Kalau variabelnya punya peran mirip, panjang namanya juga sebaiknya konsistenlet b = document.body;sangat sulit dibaca Demi menghemat beberapa byte, malah beban kognitif yang bertambah