El Atributo DATA-*

Permite almacenar información personalizada directamente en elementos HTML, facilitando la interacción con JavaScript y CSS sin alterar la semántica del documento.
El atributo data-*
en HTML permite almacenar información personalizada directamente en elementos HTML, facilitando la interacción con JavaScript y CSS sin alterar la semántica del documento. Aquí un paso a paso para dominarlo:
Sintaxis Básica
Los atributos data-*
se definen con el prefijo data-
seguido de un nombre personalizado (kebab-case):
<div id="userCard" data-user-id="123" data-user-role="admin" data-registration-date="2023-10-05" > Usuario: John Doe </div>
Acceder a los Datos con JavaScript
Usa la propiedad dataset
del elemento para leer o modificar valores:
const userCard = document.getElementById('userCard'); // Leer datos console.log(userCard.dataset.userId); // "123" console.log(userCard.dataset.userRole); // "admin" // Modificar datos userCard.dataset.registrationDate = '2024-01-01';
Nota:
-
Los nombres en
kebab-case
(ej:data-user-id
) se convierten a camelCase endataset
(userId
). -
Los valores siempre son strings. Si necesitas números, usa
parseInt()
oparseFloat()
.
Usar data-*
en CSS
Aplica estilos condicionales usando selectores de atributo:
CSS:
/* Estilo para usuarios administradores */ [data-user-role="admin"] { border: 2px solid gold; background-color: #ffeaa7; }
CSS:
/* Ocultar elementos con fecha anterior a 2024 */ [data-registration-date^="2023"] { display: none; }
Casos de Uso Prácticos
Ejemplo 1: Filtrar una Lista de Productos
HTML:
<ul id="products"> <li data-product-id="101" data-price="29.99" data-category="electronics">Laptop</li> <li data-product-id="102" data-price="9.99" data-category="books">HTML Guide</li> </ul>
JavaScript:
// Filtrar productos electrónicos con precio < $30 const products = document.querySelectorAll('#products li'); products.forEach(product => { const price = parseFloat(product.dataset.price); const category = product.dataset.category; if (category === 'electronics' && price < 30) { product.style.backgroundColor = '#e3f2fd'; } });
Ejemplo 2: Validar Formularios
HTML:
<input type="password" id="password" data-min-length="8" data-require-symbol="true" > <button onclick="validatePassword()">Validar</button>
JavaScript:
function validatePassword() { const passwordInput = document.getElementById('password'); const minLength = parseInt(passwordInput.dataset.minLength); const requiresSymbol = passwordInput.dataset.requireSymbol === 'true'; if (passwordInput.value.length < minLength || (requiresSymbol && !/[!@#$%^&*]/.test(passwordInput.value))) { alert('Contraseña inválida'); } }
Buenas Prácticas
-
Nombres claros: Usa nombres descriptivos (ej:
data-product-price
, nodata-pp
). -
Datos simples: Evita almacenar objetos complejos (usa
JSON.stringify()
si es necesario). -
No abuses: Prioriza atributos HTML estándar (como
id
,class
, oaria-*
) cuando sea posible.
Soporte en Navegadores
-
Compatible con todos los navegadores modernos (Chrome, Firefox, Safari, Edge).
-
En IE11+, funciona pero requiere polyfills para métodos avanzados de
dataset
.
Conclusión:
El atributo data-*
es una herramienta poderosa para vincular información específica a elementos HTML, mejorando la interactividad sin sacrificar accesibilidad o semántica. ¡Ideal para proyectos donde necesitas almacenar metadatos de forma limpia y eficiente!