๋ธ๋ผ์ฐ์ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋์ ์์๋ณด๊ธฐ.2
๋ฐ๋ก ์ด์ ํฌ์คํธ ๋ธ๋ผ์ฐ์ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋์ ์์๋ณด๊ธฐ.1์์
- window ๊ฐ์ฒด
- document ๊ฐ์ฒด
- DOM๊ณผ DOMํธ๋ฆฌ
- DOM์์์ ๋ ธ๋๋ ๋ฌด์์ด๊ณ ๋ ธ๋ ์ข ๋ฅ์ ๊ด๊ณ
- DOM์์์ ๋ ธ๋ ์ด๋ / ๋ ธ๋ ๊ฐ์ ์ ๊ทผํด์ ์ถ๋ ค๊ฐ์ ์์๋ณด๊ณ ๋ ธ๋ ๊ฐ์ ์์ ํ๋ ํ๋กํผํฐ
์ ๋ํด์ ์์๋ณด์๋ค.
์ด๋ฒ ํฌ์คํธ์์๋
- ์๋กญ๊ฒ ์์(element)๋ ธ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ฑํ๋ ๋ฒ๊ณผ ์์ฑํ ๋ ธ๋๋ฅผ ๊ธฐ์กด ์์๋ ธ๋์ ์ถ๊ฐํด๋ณด๊ธฐ
- ์์(element)๋ ธ๋ ์ญ์ ์ ์ด๋๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
- ์์(element) ๋ ธ๋์ ์ ๊ทผํด ์์์ ์ ๊ท ์์ฑ(attribute)๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ถ๊ฐํด๋ณด๊ธฐ
- ์๋ฐ์คํฌ๋ฆฝํธ CSS ์ปจํธ๋กค ํ๋ ๋ฐฉ๋ฒ
- ์์์ ๋น์ ๊ท ์์ฑ(attribue)๊ฐ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ
์ ๋ํด์ ์์๋ณด์.
๐ถ์์ ์ฝ๋
<html>
<head>
<title>JS ๋
ธ๋ ์ ๊ทผํด๋ณด๊ธฐ</title>
</head>
<body>
<h1>์บ๋ฆญํฐ ์์๋ณด๊ธฐ</h1>
<p>ํฑ์ปค ์บ๋ฆญํฐ</p>
<ul id="tanker-list" >
<li>๋ผ์ธํ๋ฅดํธ</li>
<li>์๋ฆฌ์ผ</li>
<li>์๊ทธ๋ง</li>
<a href="https://bossanovajju.tistory.com/">ํฑ์ปค ์บ๋ฆญํฐ ๋ณด๋ฌ๊ฐ๊ธฐ</a>
</ul>
<p>ํ๋ฌ ์บ๋ฆญํฐ</p>
<ul id="healer-list" href="www.overwatch/healer">
<li>์๋</li>
<li>๋ฉ๋ฅด์</li>
<li>๋ธ๋ฆฌ๊ธฐํ
</li>
<a href="https://bossanovajju.tistory.com/">ํ๋ฌ ์บ๋ฆญํฐ ๋ณด๋ฌ๊ฐ๊ธฐ</a>
</ul>
<script src='index.js'></script>
</body>
</html>
1.์๋กญ๊ฒ ์์(element)๋ ธ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ฑํ๋ ๋ฒ๊ณผ ์์ฑํ ๋ ธ๋๋ฅผ ๊ธฐ์กด ์์ ๋ ธ๋์ ์ถ๊ฐํด๋ณด๊ธฐ
โ ์์ ๋ ธ๋ ์์ฑํ๊ธฐ
๊ธฐ์กด #tanker-list
์์ <li>๋ ํน๋ณผ</li>
์์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ๋ค.
๋ฌผ๋ก ์๋์ ๊ฐ์ด ๊ธฐ์กด ํฌ์คํธ์์ ํ์ฉํ๋ innerHTML
์ด๋ outerHTML
ํ๋กํผํฐ๋ฅผ ํ์ฉํด๋ ๋์ง๋ง ๊ธฐ์กด์ ์์๋
ธ๋๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์์ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๊ทธ๋์ ์๋ก์ด ์์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด createElement๋ฉ์๋
๋ฅผ ์ฌ์ฉํด ์ฃผ๋๊ฒ ์ข๋ค.
@createElement ๋ฉ์๋ ์ฌ์ฉํด์ ๋ ธ๋ ์์ฑ
const newTanker = document.createElement('li');
newTanker.textContent = '๋ ํน๋ณผ';
โ ์์ ๋
ธ๋์ ์์ฑํ <li>
๋
ธ๋ ์ถ๊ฐํ๊ธฐ
๋ ธ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ ๋ฉ์๋๋ฅผ ์์๋ณด์
- prepend ๋ฉ์๋ : ํด๋น ์์ ๊ฐ์ฅ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ค.
- append ๋ฉ์๋ : ํด๋น ์์ ๊ฐ์ฅ ๋ค์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ค.
- before ๋ฉ์๋ : ํด๋น ์์ ๋ฐ๋ก ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ค
- after ๋ฉ์๋ : ํด๋น ์์ ๋ฐ๋ก ๋ค์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ค.
const tankerList = document.querySelector('#tanker-list');
tankerList.prepend(newTanker);
<ul id='tankerList'>
์ ์์ ์ฒซ๋ฒ์งธ <li>
์์ ๋
ธ๋๊ฐ ์ถ๊ฐ๋๋ค.
์๋ ์ฝ๋์ ๊ฐ์ด ์ฌ๋ฌ๊ฐ๋ฅผ ์์๋๋ก ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ ์ ์๋๋ฐ โ์ฃผ์ํ ์ ์ ๋ฉ์๋
(์์1, ์์2)
๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์ค์ ์ถ๋ ฅ๋๋ ์์๋์์2
๊ฐ ์ฒซ๋ฒ์งธ,์์1
์ด ๋๋ฒ์งธ๋ก ๋ณด์ฌ์ง๊ฑฐ ๊ฐ์๋ฐ ์ค์ ๋ก๋ ๋ฉ์๋ ์์ ๋ฃ์ ์์๋๋ก ์ถ๋ ฅ์ด ๋๋ค.
const newTanker1 = document.createElement("li");
newTanker1.textContent = "๋ ํน๋ณผ";
const newTanker2 = document.createElement("li");
newTanker2.textContent = "๋ก๋ํธ๊ทธ";
const tankerList = document.querySelector("#tanker-list");
tankerList.prepend(newTanker1,newTanker2);
๊ทธ๋์ ์์ ์ฝ๋์ ์ค์ ์ถ๋ ฅ๋ ๋ชจ์ต์
- ๋ ํน๋ณผ
- ๋ก๋ํธ๊ทธ
- ๋ผ์ธํ๋ฅดํธ ..
์์๋ก ๋ณด์ฌ์ง๊ฒ ๋๋ค.
2.์์(element)๋ ธ๋ ์ญ์ ์ ์ด๋๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
โ ์์ ๋ ธ๋ ์ญ์ ํ๊ธฐ
์์๋ ธ๋๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. remove๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
const healerList = document.querySelector('#healer-list');
healerList.firstElementChild.remove(); //<li>์๋</li>์์๊ฐ ์ญ์ ๋๋ค.
โ ์์ ๋ ธ๋ ์ด๋ํ๊ธฐ
์์ ๋ ธ๋๋ฅผ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ์์์ ํ์ฉํ๋ append,prepend,before,afeter ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
const tankerList = document.querySelector('#tanker-list');
const healerList = document.querySelector('#healer-list');
tankerList.prepend(healerList.firstElementChild);
#healder-list
์ ์ฒซ๋ฒ์งธ ์์ <li>์๋</li>
์์ ๋
ธ๋๊ฐ ์ญ์ ๋๋ฉด์ #tanker-list
์ ์ฒซ๋ฒ์งธ ์์์ผ๋ก ์ถ๊ฐ๋๋ค.
-์๋
-๋ผ์ธํ๋ฅดํธ
3.์์(element) ๋ ธ๋์ ์ ๊ทผํด ์์์ ์ ๊ท ์์ฑ(attribute)๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ถ๊ฐํด๋ณด๊ธฐ
โ <a>
์์ ๋
ธ๋์ href
์์ฑ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
getAttribute ๋ฉ์๋ ์ฌ์ฉ
const healerList = document.querySelector('#healer-list');
console.log(healerList.lastElementChild.getAttribute('href')); //outputs: https://bossanovajju.tistory.com/
์์ ๊ฐ์ด ์์์ ํ์ค ์์ฑ์ ๋ฌธ์ ์์ด ๊ฐ์ ธ์ฌ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋นํ์ค ์์ฑ์ด ์์ ๊ฒฝ์ฐ ์ด๋จ๊น?
์๋์ ๊ฐ์ด <ul>
์์ ๋
ธ๋ ์์ href="..."
๋ง์ง ์๋ ๋นํ์ค ์์ฑ๊ฐ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
<ul id='healer-list' href='www.overwatch/healer'></ul>
๋๊ฐ์ด getAttribute ๋ฉ์๋
๋ฅผ ์ด์ฉํด ๊ฐ์ ๊ฐ์ ธ์ ๋ณด์.
const healerList = document.querySelector('#healer-list');
console.log(healerList.getAttribute('href'); //outputs:www.overwatch/healer
์ฌ๊ธฐ์ ๋์จ ์ถ๋ ฅ๊ฐ์ฒ๋ผ ์์ ๋
ธ๋์ ์์ฑ์ด ํ์ค์ด๋ ๋นํ์ค์ด๋ getAttribute๋ฉ์๋
๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์์ ์ผ๋ก ๊ฐ์ด ์ถ๋ ค๋๋ ๊ฑธ ์ ์ ์๋ค.
โ <a>
์์ ๋
ธ๋์ href
์์ฑ๊ฐ ๋ณ๊ฒฝํ๊ธฐ
setAttribute ๋ฉ์๋ ์ฌ์ฉ
const tankerList = document.querySelector("#tanker-list");
tankerList.lastElementChild.setAttribute("href", "www.google.com");
console.log(tankerList.lastElementChild.getAttribute("href")); //outputs: www.google.com
4.์๋ฐ์คํฌ๋ฆฝํธ CSS ์ปจํธ๋กค ํ๋ ๋ฐฉ๋ฒ
โ HTML ์์ ๋ ธ๋ ์์ฑ๊ฐ์ผ๋ก CSS style์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
ex)๋ด๊ฐ ํฑ์ปค ์บ๋ฆญํฐ ์ค ๊ฐ์ฅ ์ ๋ค๋ฃจ๋ '์๋ฆฌ์ผ'์ธ๋งํผ ์์ HTML ์์ ์์ <li>์๋ฆฌ์ผ</li>
๋ถ๋ถ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์์ pink๋ก ํ
์คํธ๋ฅผ ๊ตต๊ฒ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค.
const tankerList = document.querySelector('#tanker-list');
tankerList.children[1].style.backgroundColor = 'pink';
tankerList.children[1].style.fontWeight = 'bold';
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํด๋น๋
ธ๋์์:tankerList.children[1]
. styleํ๋กํผํฐ:style
. CSS์์ฑ:backgroundColor
= ์ํ๋ css์์ฑ๊ฐ:pink
๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
โ์ฃผ์ํ ์ :
styleํ๋กํผํฐ
๋ฅผ ์์ฑํ ๋ ๊ธฐ์กด์background-color
๊ฐ ์๋backgroundColor
์ฒ๋ผ ์นด๋ฉ(Camel) ํ๊ธฐ๋ฒ์ผ๋ก ์์ฑํด์ผ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ styleํ๋กํผํฐ
๋ฅผ ์ด์ฉํด์ ์์ ๋กญ๊ฒ CSS๋ฅผ ์ปจํธ๋กค ํ ์ ์์ง๋ง ์กฐ์ฌํด์ผ ํ ์ ์ ์๋์ ๊ฐ์ด HTML ์์ ๋
ธ๋ ์์ฑ๊ฐ์ผ๋ก ์ฝ๋๊ฐ ์ถ๊ฐ๋๋ค๋ ๊ฒ์ด๋ค. ๊ฐ๋จํ CSS์์ฑ์ ์ถ๊ฐํ๋ ๊ฑด ๋ชจ๋ฅด๊ฒ ์ง๋ง CSS์ฝ๋๊ฐ ๋ณต์กํด์ง๋ค๋ฉด HTML๊ฐ๋
์ฑ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ผ๋ ์กฐ์ฌํด์ผ ํ๋ค.
<li style="backgrond-color: pink; font-weight: bold;">
์๋ฆฌ์ผ
</li>
โ className๊ณผ classList ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
์์์ ์ฒ๋ผ '์๋ฆฌ์ผ' ํ
์คํธ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์๊ณผ ํฐํธ ๊ตต๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ค.
์ํ๋ ์คํ์ผ์ css์ class๋ก ์ถ๊ฐํด์ฃผ์.
.font-pinkBold {
background-color: pink;
font-weight : bold;
}
โทclassName ํ์ฉํ๊ธฐ
const tankerList = document.querySelector('#tanker-list');
tankerList.children[1].className = 'font-pinkBold';
โทclassList์ ๋ค์ํ ๋ฉ์๋ ํ์ฉํ๊ธฐ
classList.add('ex') : ํด๋น css ํด๋์ค๋ฅผ ์ถ๊ฐํ ์ ์๋ค.(์ฌ๋ฌ๊ฐ์ ํด๋์ค๋ ๊ฐ๋ฅ)
classList.remove('ex') : ํด๋น css ํด๋์ค๋ฅผ ์ญ์ ํ๋ค.(์ฌ๋ฌ๊ฐ์ ํด๋์ค๋ ๊ฐ๋ฅ)
classList.toggle('ex') : ํด๋น css ํด๋์ค๊ฐ ์์ผ๋ฉด ์ ๊ฑฐํ๊ณ ์์ผ๋ฉด ์ถ๊ฐํด์ค๋ค.
const tankerList = document.querySelector('#tanker-list'); tankerList.children[1].classList.add('font-pinkBold');
์์(element) ๋ ธ๋ ๋นํ์ค ์์ฑ(attribute) ๋ค๋ฃจ๊ธฐ
HTML์์ ์ง์ํ๋ ์์ ๋ ธ๋์ ํ์ค ์์ฑ์ด ์๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ ฅํ ์์ฑ๊ณผ ์์ฑ๊ฐ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์๋์ ์์ ๋ฅผ ํตํด ์ด๋ป๊ฒ ๋ค๋ค์ผ ํ๋์ง ์์๋ณด๊ฒ ๋ค.
๐ถ์์
์ฌ๊ธฐ ํํธ๋ฅผ ๋ณด๊ณ ์ค๋ฒ์์น ์บ๋ฆญํฐ์ ์ง์ ์นดํ ๊ณ ๋ฆฌ๊ฐ ๋ฌด์์ธ์ง ๋ง์ถฐ๋ณด๋ ์๋น์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์.
<html>
<head>
<title>JS ๋
ธ๋ ์ ๊ทผํด๋ณด๊ธฐ</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1>์ค๋ฒ์์น ์บ๋ฆญํฐ ์ง์
๊ตฐ ๋ง์ถฐ๋ณด๊ธฐ</h1>
<p>
ํน์ง: <b field="point"></b>
</p>
<p>
๊ถ๊ทน๊ธฐ: <b field="ultimate"></b>
</p>
<p>
์ ๋ต:์ง์
๊ตฐ์ ๋ญ์ฃ ?<b field="status"></b>
</p>
</div>
<div>
<button status="ํฑ์ปค">ํฑ์ปค</button>
<button status="๋๋ฌ">๋๋ฌ</button>
<button status="ํ๋ฌ">ํ๋ฌ</button>
</div>
<script src="index.js"></script>
</body>
</html>
/*style.css*/
[status] {
margin: 10px;
padding: 10px;
color: white;
}
[status="ํฑ์ปค"] {
background-color: indigo;
}
[status="๋๋ฌ"] {
background-color: magenta;
}
[status="ํ๋ฌ"] {
background-color: green;
}
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ index.js
์์ ๋ง๋ค์ด์ผ ํ ๊ธฐ๋ฅ์
1. ์๋ฐ์คํฌ๋ฆฝํธ์์ ํํธ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐ์ดํฐ obj๋ฅผ ํ๋ ์์ฑ์ํจ๋ค.
const dataObj = {
point: '์ค๋์ดํผ ์ด',
ultimate: '๋๋
ธ๊ฐํ์ '
}
- ํด๋นํ๋ ์์ ๋ ธ๋์ ์ ๊ทผํ ํ์์ฑ๋ obj์ ์์ฑํค์ ์์ฑ ๊ฐ์ HTML์์ ํด๋นํ๋ ์์ ๋ ธ๋์ ์์ฑํค์ ์์ฑ๊ฐ์ ์ผ์น์์ผ ์ค์ ํ๋ฉด์ ๋ณด์ฌ์ง๊ฒ ๋ง๋ ๋ค.
const fields = document.querySelectorAll('[field]');
for(let fieldNode of fields) {
const fieldAttribute = fieldNode.getAttribute('field');
fieldNode.textContent = dataObj[fieldAttribute];
}
- ์๋์ 3๊ฐ์ ์นดํ ๊ณ ๋ฆฌ(ํฑ์ปค,๋๋ฌ,์ง์๊ฐ) button ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ง๋ค์ด ์ค ํ.๋ณด์ฌ์ง๋ ํํธ ๋ด์ฉ์ ๋ณด๊ณ ์ฌ์ฉ์ 3๊ฐ์ ์นดํ ๊ณ ๋ฆฌ ์ค ํ๋๋ฅผ ํด๋ฆญํ๋ฉด '์ ๋ต'๋์ ํด๋ฆญ๋ ๋ฒํผ์ ํ ์คํธ์ css์คํ์ผ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ ๋ณด์ฌ์ง๋ค.
const buttons = document.querySelectorAll('[status]');
for(let buttonNode of buttons) {
const buttonStatusAttribute = buttonNode.getAttribute('status');
buttonNode.onclick = function () {
fields[2].textContent = statusAttribute;
fields[2].setAttribute('status', buttonStatusAttribute);
}
}
์ฌ๊ธฐ์ status์์ฑ
์ ๊ฐ์ง ๋ฒํผ์ด ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด fields[2].setAttribute('status',buttonStatusAttribute);
๋ ์ค์ ์ ์ผ๋ก <b field="status"
์์์ status="์ด๋ฒคํธ๊ฐ ๋ฐ์ ๋ ํด๋น status๊ฐ(ํฑ์ปคor๋๋ฌorํ๋ฌ
๊ฐ ์ถ๊ฐ๋๋ค.
๋ง์ฝ 'ํฑ์ปค'๋ฒํผ์ ํด๋ฆญํ๊ฒ ๋๋ค๋ฉด ์ค์ ์ ์ธ ์์ ๋
ธ๋ ์์ฑ๊ฐ์ด <b class="" field="status" status="ํฑ์ปค">ํฑ์ปค</b>
๊ฐ์ด ๋๋ ๊ฒ์ด๋ค.
//์ต์ข
index.js์ฝ๋
const dataObj = {
point: '์ค๋์ดํผ ์ด',
ultimate: '๋๋
ธ๊ฐํ์ '
}
const fields = document.querySelectorAll('[field]');
for(let fieldNode of fields) {
const fieldAttribute = fieldNode.getAttribute('field');
fieldNode.textContent = dataObj[fieldAttribute];
}
const buttons = document.querySelectorAll('[status]');
for(let buttonNode of buttons) {
const buttonStatusAttribute = buttonNode.getAttribute('status');
buttonNode.onclick = function () {
fields[2].textContent = statusAttribute;
fields[2].setAttribute('status', buttonStatusAttribute);
}
}
๋ฌผ๋ก ์์ ์ฝ๋๊ฐ ํน๋ณํ ๋ฌธ์ ๊ฐ ์๋ ๊ฑด ์๋์ง๋ง ์ฃผ์ํ ์ ์ด ํ๊ฐ์ง ์๋ค.
โ์ฃผ์ํด์ผํ ์ : ์์์์ฒ๋ผ status
๋ผ๋ ์์ ๋
ธ๋์ ์์ฑ์ ๋ด ๋ง์๋๋ก ์ถ๊ฐํ๋๋ฐ ์๊ฐ์ด ์ง๋์ ๊ณต์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง status
ํ์ค ์์ฑ์ด ๋์๋ค๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋์ ์ฌ์ฉ์๊ฐ ์์ ๋กญ๊ฒ ์์ ๋
ธ๋์ ์์ฑ๊ฐ์ ์ถ๊ฐํ ์ ์๊ฒ ๋ง๋ค ๊ฒ์ด data-
์์ฑ์ด๋ค.
์ด data-
์์ฑ์ -
๋ค์ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ชจ๋ ์์ฑ์ด๋ฆ์ ๋ถ์ผ ์ ์๋ค.data-field
, data-status
๋ฑ ๊ทธ๋ฆฌ๊ณ ๋ ํธ๋ฆฌํ๊ฒ ๊ฐ์ ์ฌ์ฉํ ์ ์๋๋ก dataset
์ด๋ผ๋ ํ๋กํผํฐ๋ฅผ ์ง์ํ๋ค.
์์ ์ฝ๋์์ ์ ์ฉ์์ผ ๋ณธ๋ค๋ฉด
const fields = document.querySelectorAll('[field]');
for(let fieldNode of fields) {
const fieldAttribute = fieldNode.getAttribute('field');
fieldNode.textContent = dataObj[fieldAttribute];
}
์์ getAttribute()
๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์์ฑ๊ฐ์ ๊ฐ์ ธ์ค๋๋ฐ, ๋ง์ฝ HTML์์field
์์ฑ์ด ์๋ data-filed
์์ฑ์ผ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด
<p>
ํน์ง:
<b data-field="point"></b>
</p>
<p>
๊ถ๊ทน๊ธฐ:
<b data-field="ultimate"></b>
</p>
<p class="">
์ ๋ต:์ง์
๊ตฐ์ ๋ญ์ฃ ?
<b data-field="status"></b>
</p>
์๋์ ๊ฐ์ด fieldNode.getAttribute('field');
์ฝ๋ ๋์ fieldNode.dataset.field
๋ก ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
const fields = document.querySelectorAll('[field]');
for(let fieldNode of fields) {
const fieldAttribute = fieldNode.dataset.field;
fieldNode.textContent = dataObj[fieldAttribute];
}
dataset
์ ์ฌ์ฉํ ์ ์๊ฒ ์ต์ข
์ ์ผ๋ก ์์ ๋ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
<html>
<head>
<title>JS ๋
ธ๋ ์ ๊ทผํด๋ณด๊ธฐ</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1>์ค๋ฒ์์น ์บ๋ฆญํฐ ์ง์
๊ตฐ ๋ง์ถฐ๋ณด๊ธฐ</h1>
<p>
ํน์ง:
<b data-field="point"></b>
</p>
<p>
๊ถ๊ทน๊ธฐ:
<b data-field="ultimate"></b>
</p>
<p class="">
์ ๋ต:์ง์
๊ตฐ์ ๋ญ์ฃ ?
<b data-field="status"></b>
</p>
</div>
<div>
<button data-status="ํฑ์ปค">ํฑ์ปค</button>
<button data-status="๋๋ฌ">๋๋ฌ</button>
<button data-status="ํ๋ฌ">ํ๋ฌ</button>
</div>
<script src="index.js"></script>
</body>
</html>
[data-status] {
margin: 10px;
padding: 10px;
color: white;
}
[data-status="ํฑ์ปค"] {
background-color: indigo;
}
[data-status="๋๋ฌ"] {
background-color: magenta;
}
[data-status="ํ๋ฌ"] {
background-color: green;
}
const dataObj = {
point: '์ค๋์ดํผ ์ด',
ultimate: '๋๋
ธ๊ฐํ์ '
}
const fields = document.querySelectorAll('[data-field]');
for(let fieldNode of fields) {
const fieldAttribute = fieldNode.dataset.field;
fieldNode.textContent = dataObj[fieldAttribute];
}
const buttons = document.querySelectorAll('[data-status]');
for(let buttonNode of buttons) {
const statusAttribute = buttonNode.dataset.status;
buttonNode.onclick = function () {
fields[2].textContent = statusAttribute;
fields[2].dataset.status = statusAttribute;
}
}