JAVASCRIPT
Manage Custom Data Attributes with JavaScript `dataset`
Explore the `dataset` API to easily access, add, and modify custom data attributes (`data-*`) on HTML elements, enabling robust JavaScript interactions.
// Assume you have the following HTML:
// <button id="myButton" data-action="submit" data-user-id="123" data-status="active">Click Me</button>
const myButton = document.getElementById('myButton');
if (myButton) {
// 1. Accessing data attributes (camelCase conversion for JS)
const action = myButton.dataset.action; // 'submit'
const userId = myButton.dataset.userId; // '123' (data-user-id becomes userId)
const status = myButton.dataset.status; // 'active'
console.log(`Action: ${action}, User ID: ${userId}, Status: ${status}`);
// 2. Modifying data attributes
myButton.dataset.status = 'inactive';
console.log('Updated status:', myButton.dataset.status); // 'inactive'
// 3. Adding a new data attribute
myButton.dataset.timestamp = Date.now();
console.log('New timestamp:', myButton.dataset.timestamp);
// 4. Removing a data attribute
delete myButton.dataset.status;
console.log('Status after removal:', myButton.dataset.status); // undefined
// 5. Iterating through all data attributes
console.log('All data attributes:');
for (const key in myButton.dataset) {
console.log(` data-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}: ${myButton.dataset[key]}`);
}
// The HTML element's attributes will reflect these changes:
// <button id="myButton" data-action="submit" data-user-id="123" data-timestamp="1678886400000">Click Me</button>
}
How it works: This snippet demonstrates how to interact with custom data attributes (`data-*`) on HTML elements using the `dataset` property. It shows how to retrieve, modify, add, and remove these attributes. JavaScript automatically converts hyphen-separated data attribute names (e.g., `data-user-id`) to camelCase (e.g., `userId`) for easy access via `dataset`. This is a powerful way to store extra non-visual data directly on elements, facilitating dynamic behavior and state management in JavaScript.