본문 바로가기

HTML/개념

data-* attribute

일반적으로 HTML tag에는

class나 id처럼 공통적으로 사용할 수 있는 속성(attribute)가 있다.

그리고 각 태그마다 반드시 사용해야하는 속성들도 있다.

예를 들어, a 태그는 당연히 href=""속성이 필요할테고

img 태그는 src 속성이 필요하다. (img 태그에는 alt 속성도 빠지지 않고 넣어주는 게 좋다고 생각한다!)

이렇게 각 태그마다 필요한 속성들, 넣어주면 visual representation에 영향을 주는 속성들이 많이 있다.

 

 

그런데, 이렇게 정해진 속성들 말고

내가 HTML 태그에 딱히 visual representation에는 큰 영향을 주지 않지만..

몇몇 정보를 추가적으로 저장해놓고 싶을 때!

 

data-* 속성을 사용하면 편리하다.

 

 

 

 

data 속성에 대한 간단한 설명 👇

HTML5 is designed with extensibility in mind for data that should be associated with a particular element but need not have any defined meaning. data-* attributes allow us to store extra information on standard, semantic HTML elements without other hacks such as non-standard attributes, extra properties on DOM, or Node.setUserData().

출처: developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes

 

쉽게 말하자면,

추가적인 정보를 HTML tag에 저장하고 싶을 때 사용하는 도구라고 생각하면 된다!

 

 

 

 

 

 

 

HTML Syntax

<article
  id="electric-cars"
  data-columns="3"
  data-index-number="12314"
  data-parent="cars">
...
</article>

 

'data-' 뒤에 원하는 속성 이름을 넣어주면 된다.

대신 대문자가 들어가면 안되고, 두 단어 이상일 때는 dash(-)로 연결해주면 된다.

 

 

 

 

 

 

 

JavaScript Access

그렇다면 이 data 속성을 JS에서 어떻게 접근해서 사용할 수 있을까?

-> dataset object 이용!

 

const article = document.querySelector('#electric-cars');

article.dataset.columns // "3"
article.dataset.indexNumber // "12314"
article.dataset.parent // "cars"

 

해당 element를 querySelector를 통해 가져온 후

article.dataset.원하는속성이름으로 접근한다.

'원하는속성이름' 자리에는 'data-' 다음의 속성 이름만 넣어주면 된다.

여기서 주의할 점은 dash(-)로 연결됐던 이름은 camelCase로 바꿔줘야 한다는 것!

 

 

 

각 property는 string으로 읽기/쓰기 모두 가능

article.dataset.columns = 5

로 하면 data-columns 속성의 값이 5로 바뀐다.

 

 

 

 

 

또 다른 방식은 getAttribute 메소드를 사용하는 것.

getAttribute에는 'data-'까지 포함한 속성의 풀네임ㅎㅎ을 넣어줘야 한다.

article.getAttribute('data-columns')

 

 

 IE 10이나 그 이하 버전에서는 dataset object 말고 getAttribute() 사용해야 함.

 

 

 

 

 

 

 

CSS Access

-> attribute selector [ ] 사용

article[data-columns='3'] {
  width: 400px;
}
article[data-columns='4'] {
  width: 600px;
}

 

-> content 가져올 때, attr() 함수

article::before {
  content: attr(data-parent);
}

 

 

 

 

 

 

 

 

 

 

 

📑 참고 사이트

developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes

 

Using data attributes - Learn web development | MDN

HTML5 is designed with extensibility in mind for data that should be associated with a particular element but need not have any defined meaning. data-* attributes allow us to store extra information on standard, semantic HTML elements without other hacks s

developer.mozilla.org

 

'HTML > 개념' 카테고리의 다른 글

이미지 (image)  (0) 2020.10.23
링크(anchor)  (0) 2020.10.22
제목, 문단, 강조  (0) 2020.10.22
HTML Tag 공부의 시작  (0) 2020.10.22