HOME
      • 분류 전체보기 (65)
        • Life (6)
          • 사진 (6)
        • Study (21)
          • 일상·회고 (2)
          • Tools (4)
          • Computer Science (4)
          • Computer Security (1)
          • Java (6)
          • Python3 (2)
          • Android (1)
          • CodeSignal (0)
          • 임시 (1)
        • Backend (16)
          • Data Structure (0)
          • Database (2)
          • WAS with JavaEE (10)
          • WAS with Spring Boot (0)
          • Ubuntu for Raspberry Pi (4)
          • Apache Spark 2.0 (0)
        • Frontend (22)
          • HTML5 (0)
          • CSS3 (0)
          • JavaScript (11)
          • TypeScript (0)
          • React·React Native (11)
      • 트위터
      • 인스타그램
      Today
      Yesterday
      Total
        • HTMLElement와 JavaScript 간의 상호작용을 개선하는 dataset (데이터 속성)
          Frontend/JavaScript 2023. 4. 8. 17:54
          반응형

          HTML의 엘리먼트는 다음과 같이 태스 내부에 속성(Attribute) 값을 가질 수 있습니다.

          <div id="foo" bar="baz"></div>

          일반적인 개발 상황에서는 엘리먼트의 속성이 큰 이슈가 아닐 수 있지만, 커스텀 엘리먼트를 비롯해서 특정 엘리먼트의 속성이 컴포넌트의 형태를 결정하는 상황에서는 해당 태그가 자주 사용될 수 있습니다.

          예를 들어 다음과 같은 문법은 어떤 엘리먼트의 속성 값을 읽는 것을 돕습니다.

          const el = document.getElementById('foo'); // 위에 있는 예제의 엘리먼트 입니다.
          console.log(el.getAttribute('bar')); // baz

          하지만 다른 사람이 읽었을 때 HTML 표준에는 bar라는 속성이 있는지 확신할 수 없습니다.

          예를 들면, 정말 그럴싸한 이름의 속성을 짓는다면 다른 개발자가 봤을 때 해당 속성이 사용자 지정 데이터인지 HTML 표준인지 확신하기 어렵습니다.

          결정적으로, 이러한 속성 이름이 다른 속성들과 충돌할 수도 있어 (암묵적인) 네이밍 컨벤션을 따르는 등 여러 문제가 있었다고 합니다.

          따라서 HTML5에서는 이러한 문제를 해결하기 위해 dataset 속성이 생겼습니다.

          사용 방법은 매우 간단합니다.

          속성 명을 data-*으로 지어주면 됩니다.

          <div id="foo" data-hello="안녕하세요" data-age="30"></div>

          HTML에서는 이런 식으로 커스텀 속성 명을 지어주도록 권장하는데, 이를 통해 많은 개발자들이 해당 속성이 사용자 정의 되었음을 인지하게 됩니다.

          JavaScript의 dataset

          const el = document.getElementById('foo');
          console.log(el.dataset.hello); // 안녕하세요
          console.log(el.dataset.age); //30

          JavaScript에서는 data-* 속성을 직접 접근하도록 돕습니다.

          위 예제처럼 특정 엘리먼트의 dataset 값에 직접 접근하여 data-*의 *을 마치 객체의 값 처럼 접근하도록 돕습니다.

          즉, HTML과 JavaScript의 속성으로 서로 잘 상호작용할 수 있게 됩니다.

           

          단점은 없을까?

          dataset 속성은 HTML5에서 추가되었으므로 이전 버전의 브라우저에서는 지원되지 않을 수 있습니다.

          따라서 호환성 문제를 고려하여 다른 방법을 사용해야 할 수 있습니다.

          또, 데이터 크롤러가 태그의 속성을 읽을 수 없을 수도 있는 문제가 있다고 합니다.

           

          https://developer.mozilla.org/ko/docs/Learn/HTML/Howto/Use_data_attributes

          반응형
          저작자표시 비영리 변경금지 (새창열림)

          'Frontend > JavaScript' 카테고리의 다른 글

          JavaScript의 cloneNode와 이벤트 버블링을 활용한 HTML template tag 활용법  (0) 2023.04.11
          JavaScript의 모듈 시스템과 Singleton 패턴을 통한 객체 공유  (1) 2023.04.11
          IntersectionObserver를 활용한 element 감지 및 응용 (무한스크롤, 중간광고 예제 포함)  (0) 2023.04.08
          CustomEvent를 활용하여 customElements에 객체를 전달하는 방법  (0) 2023.03.27
          JavaScript의 customElements에서 Proxy을 활용한 객체 변화 감지  (0) 2023.03.03

          관련글 관련글 더보기

          • JavaScript의 cloneNode와 이벤트 버블링을 활용한 HTML template tag 활용법
          • JavaScript의 모듈 시스템과 Singleton 패턴을 통한 객체 공유
          • IntersectionObserver를 활용한 element 감지 및 응용 (무한스크롤, 중간광고 예제 포함)
          • CustomEvent를 활용하여 customElements에 객체를 전달하는 방법

          댓글

        반응형

        인기포스트

        ABOUT ME

        LINK

        ADMIN

        admin 글쓰기
        Designed by Gabriel Ju Hyun Yoon, 2021

        티스토리툴바