data-* attribute는 어떤 HTML element에든 커스텀하고 사적인 데이터를 저장하게 해줍니다. 비표준 attribute나 class를 남용하지 않고, JavaScript가 읽을 수 있는 메타데이터를 DOM에 붙이는 표준 방식입니다.
html
<button
data-id=
=
=
>Edit
dataset을 통해 JavaScript에서 읽기const btn = document.querySelector("button");
btn.dataset.id; // "42"
btn.dataset.userRole; // "admin" ← kebab-case가 camelCase가 된다
btn.dataset.isActive; // "true" ← 항상 문자열
// 쓰기를 하면 attribute도 갱신된다
btn.dataset.id = "99"; // DOM에서 data-id="99"로 설정한다
두 가지 핵심 규칙: data-user-role은 dataset.userRole로 접근하고(대시가 camelCase로 바뀜), 모든 값은 문자열이므로 필요에 따라 변환해야 합니다(Number(btn.dataset.id), btn.dataset.isActive === "true").
button[data-is-active="true"] { font-weight: bold; }
button::after { content: attr(data-id); } /* 값을 표시한다 */
list.addEventListener("click", (e) => {
const id = e.target.dataset.id; // 어떤 항목이 클릭되었는지 안다
if (id) deleteItem(id);
});
각 element에 id를 저장하면 부모에 리스너 하나로 모든 항목을 처리할 수 있습니다.
data-*는 (추가 API 호출 없이) 서버 데이터를 클라이언트 측 JS를 위해 DOM으로 전달하고, 이벤트 위임을 연결하며, CSS 상태를 구동하는 깔끔하고 표준을 준수하는 방법입니다. HTML을 무효로 만드는 비표준 attribute를 만들어내지 않아도 됩니다.
다만 크거나 민감한 데이터는 저장하지 마십시오. 마크업에 노출됩니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기