엘레먼트 요소에서 data 를 이벤트 핸들러로 사용하기
1. html5 부터는 id 나 class 처럼 data 속성을 사용할 수 있습니다.
data 속성은 data-my = "어쩌구저쩌구" 로 사용하고 이를 호출할 때는 dataset.my 로 호출합니다.
위에서 my 는 본인이 임의적으로 주는 것이구요.
----------
2. 예제를 하나 들어 보갰습니다.
http://www.mediaplayer.kr/main/bbs/html_editor.php
위 에디터에서 직접 확인해 보세요.
각 div 에 클래스를 주고 클래스를 물고 늘어져서 개별 버튼 클릭시 모두 검은 텍스트가 되고 본인만 빨간 텍스트가 되는 코드입니다.
<style>
.aa { width:300px; font-weight:bold; cursor:pointer; padding:10px; text-align:center; border:1px solid #cccccc; margin:0 auto; margin-bottom:5px; }
</style>
<div class="aa">하나</div>
<div class="aa">두울</div>
<div class="aa">세엣</div>
<div class="aa">네엣</div>
<div class="aa">다섯</div>
<div class="aa">여섯</div>
<script>
classAa = document.getElementsByClassName("aa");
for (aa of classAa) {
aa.onclick = function() {
for (aa of classAa) aa.style.color = "black";
this.style.color = "red";
}
}
classAa[0].onclick();
</script>
----------
그런데 처음 3개는 빨간색으로 나머지 3개는 파란색으로 바꾸고 싶습니다.
그렇다면 클래스를 하나 더 만들거나 개별 div 마다 아이디를 주어서 핸들링을 해야 할까요?
이 때에 바로 data 속성을 이용하면 굉장히 간결해집니다.
----------
<style>
.aa { width:300px; font-weight:bold; cursor:pointer; padding:10px; text-align:center; border:1px solid #cccccc; margin:0 auto; margin-bottom:5px; }
</style>
<div class="aa" data-bb="red">하나</div>
<div class="aa" data-bb="red">두울</div>
<div class="aa" data-bb="red">세엣</div>
<div class="aa" data-bb="blue">네엣</div>
<div class="aa" data-bb="blue">다섯</div>
<div class="aa" data-bb="blue">여섯</div>
<script>
classAa = document.getElementsByClassName("aa");
for (aa of classAa) {
aa.onclick = function() {
for (aa of classAa) aa.style.color = "black";
this.style.color = this.dataset.bb;
}
}
classAa[0].onclick();
</script>
----------
물론 저 같은 경우는 위에 처럼 하지 않고 변수나 배열로 변동사항을 따로 끄집어 내어 코드 수정이 용이하게 가공을 한번 더 하지요. 아래에서 3 은 처음부터 3개까지 빨간색이고 텍스트는 zzz 이라는 배열에 담아 놓았습니다.
<style>
.aa { width:300px; font-weight:bold; cursor:pointer; padding:10px; text-align:center; border:1px solid #cccccc; margin:0 auto; margin-bottom:5px; }
</style>
<script>
red = 3;
zzz = ["하나", "두울", "세엣", "네엣", "다섯", "여섯"];
for (i in zzz) {
redblue = (i < red) ? "red" : "blue";
document.write('<div class="aa" data-bb=' + redblue + '>' + zzz[i] + '</div>');
}
classAa = document.getElementsByClassName("aa");
for (aa of classAa) {
aa.onclick = function() {
for (aa of classAa) aa.style.color = "black";
this.style.color = this.dataset.bb;
}
}
classAa[0].onclick();
</script>
댓글 4개
따라서 공부해봐야하는데 스크랩만 늘어가네요
실제로는 함수를 만드는 것이 훨 간명하구요.
저 같은 경우는 데이터 셋을 좀 동떨어진 사용법일 수 있으나
게시판 스킨의 템플릿 코드 대용으로 활용하고 있습니다
html속성이니 템플릿 페이지를 그대로 실행해서 볼 때도 눈에 거슬리지 않고 좋습니다
활용하기에 따라 아주 유용한 부분인 것 같습니다
데이터라는 말 그대로 어떤 정보를 그 엘레먼트의 변수로 담아두는 것과 같은 이치라 필요할 때 개개의 엘레먼트에서 꺼내 쓸수 있기 때문에 본인의 상상력에 따라 무한 응용이 가능하다고 봐요. 에뜨락님처럼 활용해도 되구요.
문자열을 담아 논 거라 split 배열 처리도 가능합니다. 아래처럼 본인의 데이터에 내장된 정보를 배열로 쪼갤 수도 있겠지요.
<div id=aa data-bb="red*비타주리">그누보드</div>
<script>
aa.style.color = aa.dataset.bb.split("*")[0];
aa.innerText = aa.dataset.bb.split("*")[1];
</script>
게시판 목록
개발자팁
질문은 QA에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 4916 | 웹서버 | 6년 전 | 2867 | ||
| 4915 | PHP |
|
6년 전 | 2182 | |
| 4914 | 웹서버 | 7년 전 | 1895 | ||
| 4913 | JavaScript | 7년 전 | 2599 | ||
| 4912 | node.js | 7년 전 | 3715 | ||
| 4911 | 기타 | 7년 전 | 4194 | ||
| 4910 | 기타 | 7년 전 | 2278 | ||
| 4909 | 기타 | 7년 전 | 1984 | ||
| 4908 | 기타 | 7년 전 | 2020 | ||
| 4907 | Mobile | 7년 전 | 2290 | ||
| 4906 | JavaScript | 7년 전 | 2293 | ||
| 4905 | 기타 | 7년 전 | 2274 | ||
| 4904 | jQuery | 7년 전 | 2520 | ||
| 4903 | PHP | 7년 전 | 5230 | ||
| 4902 | jQuery | 7년 전 | 5130 | ||
| 4901 | 기타 | 7년 전 | 2709 | ||
| 4900 | MySQL | 7년 전 | 4116 | ||
| 4899 | 기타 | 7년 전 | 2267 | ||
| 4898 | 웹서버 | 7년 전 | 2452 | ||
| 4897 | MySQL | 7년 전 | 2206 | ||
| 4896 | MySQL | 7년 전 | 2636 | ||
| 4895 | JavaScript | 7년 전 | 9776 | ||
| 4894 | 웹서버 | 7년 전 | 2364 | ||
| 4893 | 기타 | 7년 전 | 8320 | ||
| 4892 | jQuery | 7년 전 | 5686 | ||
| 4891 | 기타 | 7년 전 | 2838 | ||
| 4890 | PHP | 7년 전 | 3421 | ||
| 4889 | JavaScript | 7년 전 | 6377 | ||
| 4888 | MySQL | 7년 전 | 3139 | ||
| 4887 | MySQL | 7년 전 | 2767 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기