dataset en JavaScript : lire et écrire les attributs data-* d'un élément

dataset donne accès aux attributs data-* d'un élément HTML : la conversion des noms, le fait que tout y est une chaîne, et son rôle dans la délégation.
3 min de lecture
Believemy logo

Une ligne de tableau affiche une commande, et le bouton qui la supprime doit connaître son identifiant. Où ranger cette information sans la sortir du HTML ?

Le langage prévoit un emplacement officiel pour cela : les attributs data-*, lisibles depuis JavaScript par une seule propriété.


Définition

dataset est une propriété présente sur tout élément HTML, qui donne accès à ses attributs commençant par data-. Chaque attribut y apparaît comme une clé, lisible et modifiable comme celle d'un Object (objet) ordinaire.

JAVASCRIPT
// <li data-id="42" data-etat="paye" data-date-envoi="2026-03-14">

const ligne = document.querySelector("li");

console.log(ligne.dataset.id);          // "42"
console.log(ligne.dataset.etat);        // "paye"
console.log(ligne.dataset.dateEnvoi);   // "2026-03-14"

ligne.dataset.etat = "rembourse";       // met l'attribut à jour dans le HTML


La conversion des noms

Le préfixe disparaît, et chaque tiret suivi d'une lettre devient une majuscule. La correspondance est mécanique dans les deux sens.

Attribut HTMLClé JavaScript
data-iddataset.id
data-user-iddataset.userId
data-prix-hors-taxesdataset.prixHorsTaxes

Écrire dataset.prixTotal crée donc un attribut data-prix-total, visible dans l'inspecteur du navigateur.


Tout y est une chaîne

Un attribut HTML ne stocke que du texte. La valeur lue est toujours un String (chaîne de caractères), même quand elle ressemble à un nombre ou à un booléen, et c'est la source d'erreur la plus courante.

JAVASCRIPT
// <div data-quantite="3" data-actif="false">

const bloc = document.querySelector("div");

console.log(bloc.dataset.quantite + 1);           // "31"
console.log(Number(bloc.dataset.quantite) + 1);   // 4

if (bloc.dataset.actif) console.log("passe quand même");

La dernière ligne s'exécute parce que la chaîne "false" se range du côté vrai, comme l'explique Truthy et falsy. Comparez explicitement, avec === "true", plutôt que de vous fier au test direct.


Le compagnon de la délégation

C'est dans la Délégation d'événement que cette propriété prend tout son sens : l'écouteur unique retrouve l'élément visé, puis y lit l'identifiant à traiter.

JAVASCRIPT
tableau.addEventListener("click", (event) => {
  const bouton = event.target.closest("[data-id]");
  if (!bouton) return;

  console.log("supprimer la commande", bouton.dataset.id);
});


Questions fréquentes

Question

Pourquoi ne pas inventer un attribut maison ?

Un attribut comme idcommande rend le document non conforme, n'apparaît pas dans dataset et peut entrer en collision avec un attribut standardisé plus tard. Le préfixe data- est justement réservé aux besoins propres à une application.


Question

Peut-on y ranger un objet ?

Seulement sous forme de texte, par exemple avec JSON à l'écriture et à la lecture. Cela reste acceptable pour quelques champs, et devient lourd au-delà. Pour associer des données riches à un élément, une WeakMap ou un Map conservé en mémoire est plus adapté.


Question

Le visiteur peut-il voir ces valeurs ?

Oui, et les modifier. Un attribut data-* figure dans le HTML envoyé au navigateur et s'édite en deux clics dans l'inspecteur. Aucun prix, aucun rôle et aucune permission ne doit y être considéré comme fiable : le serveur revérifie systématiquement.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.