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!