- L’API HTMLTableElement existe depuis longtemps, mais c’est une interface intégrée de manipulation des tableaux HTML rarement utilisée
- Cette API permet de créer et d’accéder directement à tbody, thead, tfoot, caption, row, cell, etc., sans avoir à réafficher l’ensemble du tableau à chaque modification
- Le code d’exemple montre comment convertir des données en tableaux imbriqués en tableau HTML et ajouter des lignes et des cellules via
insertRow() et insertCell()
- Il est possible d’accéder à une cellule par index comme avec
t.rows[1].cells[1], ou d’effectuer diverses manipulations comme ajouter une dernière ligne avec insertRow(-1)
- L’auteur indique que cette API offre un potentiel d’extension des fonctionnalités du tableau en tant que structure de données, avec la possibilité d’y ajouter des événements ou d’autres fonctions, à l’image des formulaires
Vue d’ensemble de l’API des tableaux HTML
- La plupart des développeurs créent les tableaux avec des méthodes DOM (
createElement, etc.) ou par insertion de chaînes innerHTML, mais cette dernière approche comporte des risques de sécurité
- HTML dispose d’une ancienne API HTMLTableElement, qui permet de manipuler le corps, les lignes, les cellules, l’en-tête, le pied, la légende, le résumé (
summary), etc. d’un tableau
- Cette API permet de manipuler des éléments individuellement sans réafficher l’ensemble du tableau
Exemple de code : créer un tableau à partir d’un tableau
- L’exemple convertit le tableau imbriqué suivant en tableau HTML
[['one','two','three'], ['four','five','six']]
- Le tableau est créé avec
document.createElement('table'), puis chaque ligne (insertRow) et cellule (insertCell) est ajoutée dans une boucle
- Le contenu de chaque cellule est défini avec
innerText
Accès et modification des cellules
- Les cellules du tableau créé sont accessibles par index
- Exemple :
t.rows[1].cells[1] → <td>five</td>
- Il est aussi possible de supprimer ou d’ajouter des lignes et des cellules
- Exemple :
t.insertRow(-1) ajoute une ligne à la fin
t.rows[2].insertCell(0) crée une nouvelle cellule, puis innerText = 'foo' en définit la valeur
Limites de l’API
- Il existe des règles d’indexation peu intuitives, comme
insertRow(-1)
- Aucun moyen n’est prévu pour créer directement un élément
TH, toutes les cellules étant traitées comme des TD
Possibilités d’évolution
- L’auteur souligne le caractère fastidieux de la création de tableaux et propose de réexaminer cette API pour en étendre les fonctionnalités
- Comme des événements
change ou formData ont été ajoutés aux formulaires HTML, il évoque la possibilité d’introduire dans les tableaux des événements ou des fonctions avancées
- Cela permettrait au tableau d’être considéré non plus comme un simple outil de mise en page, mais comme une véritable structure de données
2 commentaires
En tant que développeur relativement peu expérimenté, je suis surpris de voir des textes qui parlent avec émerveillement d’une API utilisée depuis le début, comme s’ils l’avaient « découverte ».
Avis Hacker News
Beaucoup de gens semblent ne pas avoir lu l’article correctement Le point central ici n’est pas la balise `` elle-même, mais l’interface DOM dédiée aux tables Par exemple, des méthodes comme
HTMLTableElement.prototype.insertRow()ouHTMLTableRowElement.prototype.insertCell()sont plus intuitives quecreateElement()ouappendChild()Mais dans les UI basées sur des bibliothèques comme React, Svelte ou Vue, on n’utilise presque plus ce genre de méthodes Il est intéressant de voir que, comme dans la syntaxe HTML,thead,tbodyettfootsont gérés automatiquement même si on les omet Au cours des cinq dernières années, j’ai déjà utilisé directement.insertRow,.insertCell,.createTHead,.rowset.cellsdans des scripts de démo Côté style de code, je trouve plus propre d’utiliserforplutôt queforEach, et d’omettre l’argument d’indexJe me souviens avoir utilisé cette API il y a environ six mois, après l’avoir vue dans la documentation MDN ou sur recommandation d’une IA Les propriétés
rowsetcellsétaient très pratiques pour implémenter la navigation au clavier On peut voir un exemple lié dans le code de ClickHouseC’est dans la même veine que la discussion sur les boutons (fil précédent) Depuis 10 à 15 ans, tout est passé en ``, et le HTML est utilisé comme une boîte à outils UI plutôt que pour du balisage sémantique
neutre En fait, je pense même qu’avoir séparéet `` était une erreur de conceptionJ’ai utilisé cette API en créant un outil de comparaison d’images Stable Diffusion Comme il y avait beaucoup de lignes et de colonnes, il fallait souvent recréer le tableau, mais les mises à jour du DOM étaient plus lentes qu’une génération en une seule fois sous forme de chaîne C’est probablement parce que chaque appel d’API met à jour le DOM immédiatement
Il était expliqué qu’on pouvait « éviter de rerendre tout le tableau », mais en réalité les méthodes DOM standard fonctionnent déjà ainsi Cela dit, c’est plutôt sympa que ça permette de réduire les parcours DOM fastidieux
L’API des formulaires HTML mériterait aussi d’être redécouverte
Le problème des tableaux, ce n’est pas de remplir les données, c’est l’absence totale de recherche, tri et filtrage
Je ne comprends pas l’idée que « cette API a été abandonnée » Je l’utilise encore souvent quand je crée des tableaux HTML
Le code d’exemple est intéressant, mais les noms de variables sont tellement abrégés que ça nuit à la lisibilité Il vaudrait mieux utiliser des noms explicites plutôt que
b,t,r,c(ri, i)qui prête à confusion Quand des variables jouent des rôles similaires, il vaut mieux harmoniser aussi leur longueurlet b = document.body;est particulièrement difficile à lire Pour économiser quelques octets, on ne fait qu’augmenter la charge cognitive