규도자 개발 블로그
[Javascript/자바스크립트] jQuery에서 .data로 가져오는 것과 .attr로 가져오는 것의 차이 본문
[Javascript/자바스크립트] jQuery에서 .data로 가져오는 것과 .attr로 가져오는 것의 차이
규도자 (gyudoza) 2020. 4. 1. 15:15.attr("data-이름")
이런 식으로 조회해야지만 변경이 적용된 값을 조회할 수 있다.
코드샌드박스에 예제를 작성해놓았다. 이런식으로 진행해보면 이상하다는 점을 알 수 있다.
첫번째 방법
data를 조회하는 버튼과 attr을 조회하는 버튼을 눌러보자. 아래와 같이 둘 다 3이 뜰 것이다.
그리고 data-index를 attr을 통해 1로 바꾸는 버튼을 눌러본 뒤에 다시 아래 두 개의 버튼을 눌러보자.
띠용이다. 특정 element를 .data로 조회하는 함수는 그대로 3을 출력하고 있고 attr로 조회하는 함수만 값이 변하였다.
실제 태그 속성을 확인해도 1로 변경돼있는 걸 확인할 수 있다. 하지만 .data로 조회하면 여전히 변경하기 전 값인 3이 뜬다.
두번째 방법
두번째 방법은 data-index속성을 먼저 1로 변경한 뒤에 .data를 조회하는 것이다. 그러면 뭐가 뜰까?
바로 1이 뜬다. 근데 이 상황에서 .attr함수가 아닌 .data로 data속성을 바꾼다면? attr이 아니라 data로 바꿔보는 버튼을 누른 뒤에 값을 확인해보도록 하자.
이번엔 .attr의 값은 그대로 있되 .data로 조회한 값만 변한 걸 확인할 수 있다. 내부 속성값을 확인해보면
띠용. 여전히 내부 실제값은 1이지만 5가 조회되는 걸 확인할 수 있다.
이를 통해 jQuery에서 .data함수가 어떻게 작동하는지 유추할 수 있다.
1. .data함수는 맨 처음 조회할 때 해당 태그에 저장된 실제 속성값을 특정 메모리에 작성한다.
2. 이부분은 .attr함수를 통해 실제 속성값을 변경하더라도 변경되지 않는다.
3. .data함수로 저장한 부분을 attr함수가 아닌 .data함수로 변경하고 싶으면 $('선택자').data('이름', '값'); 이런식으로 변경할 수 있으나 실제 속성값은 변하지 않고 1에서 말했던 특정 메모리 값이 변한다.
4. 그런 고로 .data로 조회하는 커스텀 데이터 값과 .attr로 조회하는 커스텀 데이터 값에 괴리가 발생할 수 있으니 제대로 알고 쓰자.
끗.
'HTML/CSS/JS > JavaScript' 카테고리의 다른 글
[React Native] expo로 만들 때 안드로이드 가상화까지 돌려보기 (windows 10) (2) | 2020.11.10 |
---|---|
[Javascript/자바스크립트] 프론트단에서 클라이언트에 정보 저장하기 (localStorage와 sessionStorage) (0) | 2019.11.15 |
[JavaScript/자바스크립트] InternetExplore에서 Promise쓰기 (0) | 2019.10.03 |
[JavaScript/자바스크립트] 1과 0, 혹은 '1'과 '0'을 boolean으로 전환하는 쉬운 방법 (2) | 2019.09.03 |
크롬 자바스크립트 버그 발견 후 리포트 완료 (0) | 2019.07.08 |