์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์น ๋ฌธ์์ ์ ๊ทผํ๊ณ ์ ์ดํ ์ ์๋๋ก ์น๋ฌธ์๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
DOM์์๋ ์น ๋ฌธ์๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ์ ์ํ๊ณ , ์น ๋ฌธ์๋ฅผ ์ด๋ฃจ๋ ํ
์คํธ๋ ์ด๋ฏธ์ง, ํ ๋ฑ ๋ชจ๋ ์์๋ ๊ฐ๊ฐ ๊ฐ์ฒด๋ก ์ ์ํ๋ค.
์๋ฅผ ๋ค๋ฉด, ์น๋ฌธ์ ์ ์ฒด๋ document๊ฐ์ฒด๋ก, ์น ๋ฌธ์์ ์ฝ์
๋ ์ด๋ฏธ์ง๋ image๊ฐ์ฒด๋ก ๋ํ๋๋ค.
์ด๋ ๊ฒ ์น ๋ฌธ์์ ๊ทธ ์์ ์์๋ค์ ๊ฐ์ฒด๋ก ์ธ์ํ๊ณ ์กฐ์ ํ๋ฏ๋ก ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋ค.
DOM์ ํ์ฉํด ์น ๋ฌธ์์ ์์๋ฅผ ๋ถ๋ชจ์ ์์์ผ๋ก ๊ตฌ๋ถํด์ ํ์ํ๋ค ๋ณด๋ฉด ๋ง์น ๋๋ฌด์ฒ๋ผ ๋ชจ์์ด ๋ํ๋ ์ด๊ฒ์ DOMํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์น ๋ฌธ์๋ ์ฌ๋ฌ๊ฐ์ง ํ๊ทธ๊ฐ ์๋ก ํฌํจ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ฐ ํฌํจ ๊ด๊ณ๋๋ฌธ์ ๊ฐ ํ๊ทธ ๊ฐ์๋ '๋ถ๋ชจ'์ '์์'๊ด๊ณ๊ฐ ์๊ธฐ๊ฒ ๋๊ณ , ์ด ๋ ๋ฐ์ ์๋ ์์๋ ๋ถ๋ชจ์์, ์์ ํฌํจ๋ ์์๋ ์์์์๋ก ๋ณด๋ฉด ๋๋ค.
์๋ฅผ ๋ค๋ฉด, ์๋ 1๋ฒ์ ๋ณด๊ฒ ๋๋ฉด html์์๋ head์์์ body์์์ ๋ถ๋ชจ ์์๊ฐ ๋๊ณ body์์๋ ๋ค์ h1์์์ ul์์์ ๋ถ๋ชจ์์๊ฐ ๋๋ค. ์ฌ๊ธฐ์ ๋์ด ๋์ง ์๊ณ li์์๋ ๋น๊ทผ์ ๋ถ๋ชจ๊ฐ ๋๊ณ button์ ์๊ฒ ๋?์ ๋ถ๋ชจ๊ฐ ๋๋ค.
1๋ฒ
<html lang="ko"> <head> <title>DOM ์์ </title> </head> <body> <h1 id="title">์ฅ ๋ณผ ๋ด์ญ</h1> <ul> <li>๋น๊ทผ</li> <li>์ค์ด</li> <li>์ํ</li> </ul> <button>์๊ฒ ๋?</button> </body> </html>
2๋ฒ (1๋ฒ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด)
3๋ฒ (1๋ฒ ์ฝ๋ ์์ ์ ์ํ ์ฝ๋)
const title = document.getElementById("title"); title.textContent = "์ฃผ๋ฌธํ ๊ฒ";
4๋ฒ (3๋ฒ์์ ์์ ํ ์ฝ๋๋ฅผ ๋์ ํ ๋ชจ์ต)
์์ 3๋ฒ์์ ๋์ค๋ document์ ๋ํด์ ์ค๋ช
ํ๋ฉด,
๋ธ๋ผ์ฐ์ ์ฝ์์ฐฝ์ console.log(document);๋ฅผ ์
๋ ฅํ๋ฉด
5๋ฒ๊ณผ ๊ฐ์ด document๊ฐ์ฒด๊ฐ ์ถ๋ ฅ๋๋ค
5๋ฒ
๋ฐ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์ปดํจํฐ ์์ฒด์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ Node.jsํ๊ฒฝ์์ ๋๊ฐ์ด ์คํํด๋ณด๋ฉด
6๋ฒ๊ณผ ๊ฐ์ด document is not defined๋ผ๊ณ ๋์จ๋ค.
6๋ฒ
์ด๊ฒ์ผ๋ก ๋ณด์
document ๊ฐ์ฒด๊ฐ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ง ์ ๊ทผ์ด ๋๋ค๋๊ฑธ ์ ์ ์๋ค.
๊ทธ๋ ๋ค๋๊ฑด document ๊ฐ์ฒด๊ฐ
์๋ฐ์คํฌ๋ฆฝํธ ์์ฒด์ ์์๊ฐ ์๋๋ผ ๋ธ๋ผ์ฐ์ ๋ ํ๊ฒฝ์์ ์ ๊ณต๋๋ค๋ ๊ฒ์ด๋ค.
์น ๊ฐ๋ฐ์์ ์ฌ์ฉ๋๋ document๊ฐ์ฒด๋ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ window ๊ฐ์ฒด์ ํ ์์์ด๊ณ ,
์ด window.document ๊ฐ์ฒด๋ฅผ DOM์ด๋ผ๊ณ ๋ถ๋ฅํ๋ค.
์ฐ๋ฆฌ๊ฐ ์น์ฌ์ดํธ์ ์ ์ํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ HTML๋ฌธ์๋ฅผ ์ฝ์ด๋ค์ธ๋ค.
HTML์ฝ๋๊ฐ ์ค๊ณ๋๋ผ๊ณ ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๊ณต์ฅ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
๊ณต์ฅ์์๋ ์ด ์ค๊ณ๋๋ฅผ ํด์ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ ์ด ๊ณผ์ ์ parsing์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ๋ก DOM์ด๋ผ๋ ๊ธฐ๊ณ๊ฐ ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
์ ๋ฆฌํ์๋ฉด, HTML์ด๋ ์ค๊ณ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๋ ๊ณต์ฅ์ผ๋ก ๋ณด๋ด๋ฉด DOM์ด๋ผ๋ ๊ธฐ๊ณ๊ฐ ๋ง๋ค์ด์ง๋ค๊ณ ๋ณผ ์ ์๋ค.
7๋ฒ (1๋ฒ์ DOMํธ๋ฆฌ๊ตฌ์กฐ)
DOM์ 7๋ฒ ํธ๋ฆฌ ์ ์ฒด๋ฅผ ์๋ฏธํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ์์๋ค ํ๋ํ๋๋ฅผ Node๋ผ๊ณ ๋ถ๋ฅธ๋ค
์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์นํ์ด์ง์ ์์๋ค์ ์ ์ดํ ์ ์๋๊ฑด ์ด๊ฒ๋ค ํ๋ํ๋๊ฐ ๋ชจ๋ API์ด๊ธฐ ๋๋ฌธ์ด๋ค
๐ API๋?
๋ค๊ฐ ์ด๋ ๊ฒ ์ฃผ๋ฌธํ๋ฉด ๋ด๊ฐ ์๋ ๊ฒ ํด์ค๊ฒ ๋ผ๊ณ ๋ฉ๋ดํ์ฒ๋ผ ๋ง๋ค์ด๋์ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค
์ฝ๋ผ๋ฒํผ์ ๋๋ฅด๋ฉด ์บ์ฝ๋ผ๊ฐ ๋์ค๋ ์ํ๊ธฐ์ฒ๋ผ ๋ด๊ฐ ํ ์ ์๋ ์ผ๋ค์ ๋จ์ด ์ํฌ ์ ์๋๋ก ๋ฒํผ๋ค ๊ฐ์ ๊ฑธ ๋ง๋ค์ด๋ ๊ฒ
DOM์ ์ญํ
์์ 3๋ฒ์ document๊ฐ ํธ๋ฆฌ๊ตฌ์กฐ ๊ทธ๋ฆผ์ document๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
document์๋ getElementById๋ ๋ฒํผ, ์ฆ ๊ธฐ๋ฅ์ด ์๋๋ฐ ์ด๊ฑด DOM๋ด์ ์ฃผ์ด์ง ID, ์ฌ๊ธฐ์๋ title์ ๊ฐ์ง ๋
ธ๋ ์ฆ, h1์ด๋ ๋ถํ์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ์คํํ๋ค.
1๋ฒ ์์ ์์๋ h1, ul, li, button์์๋ค์ด ์ฌ์ฉ๋๊ณ
์ด ์์๋ค์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค.
8๋ฒ (์์๋ค์ ์์๊ตฌ์กฐ)
8๋ฒ์ ๊ฐ ์์๊ฐ ์ด๋ค ๋ฒ์ฃผ์ ์ํ๋์ง๋ฅผ ๋ํ๋ด๋ ์์๋์ด๋ค.
์๋ฅผ ๋ค๋ฉด, h1 > HTMLHeadingElement > HTMLElement > Element > Node > EventTarget
์ด ๊ตฌ์กฐ๋ก ์์ ๋ฐ๋๋ค (์์์ ํ ์ข
๋ฅ๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค)
๊ฒฐ๊ตญ ์ฌ๊ธฐ์๋ ๋ชจ๋ ์์๋ค์ด EventTarget์ด๋ ๊ณตํต๋ฒ์ฃผ์ ์ํ๋ค.
์ฆ, ๋ชจ๋ EventTarget์ด๋ค.
getElementById๋ Document์ ๊ณ ์ ๊ธฐ๋ฅ, ๋๋ฌธ์ document์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค
textContent๋ Node์ ๊ธฐ๋ฅ์ด๋ค. ๊ทธ ๋ง์ธ ์ฆ์จ, ๊ทธ ๋ฐ์ผ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์๋ค์ด ์ฌ์ฉํ ์ ์๋ค.
EventTarget์ ์ด๋ค ์ด๋ฒคํธ๋ค์ ๋์์ด ๋๋ค๋ ๊ฒ์ด๊ณ , ์ด๋ ํด๋ฆญ์ด๋ ๋๋๊ทธ, ํค๋ณด๋ ์ ๋ ฅ, ์์ ๋ก๋ ๋ฑ์ ์ด๋ฒคํธ๋ค์ ๋งํ๋ค.
addEventListener : ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ค ์ผ์ ์ํํ๋ผ๊ณ ํน์ ์์์ ๋ฑ๋ก์ ํด์ฃผ๋ ๊ธฐ๋ฅ
addEventListener๋ EventTarget์ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๋ชจ๋ ์์์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ด์ฒ๋ผ DOM์์๋ค์ ๊ณ ์ ๊ธฐ๋ฅ๊ณผ ์์๊ด๊ณ๋ฅผ ์๋ฉด ๊ฐ๊ฐ์์ ๋ฌด์์ ์ฌ์ฉํ ์ ์๋์ง ํ์
ํ ์ ์๋ค
๐ BOM
Browser Object Model
๋ธ๋ผ์ฐ์ ๋ DOM๋ง๊ณ ๋ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์ผ์ด๋ ์ผ๋ค์ ํ๋ก๊ทธ๋๋ฐ ํ ์ ์๋๋ก BOM์ ์ ๊ณตํ๋ค
๋ค๋ฅธ ์นํ์ด์ง๋ก ์ด๋ํ๊ฑฐ๋ ํ๋ฉด ๊ด๋ จ ์ ๋ณด๋ฅผ ์ป๊ฑฐ๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฆผ์ฐฝ์ ๋์ฐ๊ฑฐ๋ AJAX์์ฒญ์ ๋ณด๋ด๋ ๋ฑ ์๋ง์ ๊ธฐ๋ฅ๋ค์ด ์๋ค
DOM๊ณผ BOM์ ํตํ์ด์ WEB API๋ผ๊ณ ํ๋ค
WEB API๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์๋์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ ๋ฑ์ ํตํด ์ ์ด๋ ์ ์๋๋ก ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณต๋๊ณ ์๋ค
์น์์์ ์ ๊ทผํ๋ค๋ ์๋ฏธ๋
์๋ฐ์คํฌ๋ฆฝํธ์์ ์น ๋ฌธ์์ ์๋ ์ด๋ฏธ์ง๋ ํ
์คํธ, ํ ๋ฑ ํน์ ์์๋ฅผ ์ฐพ์๊ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ ํ์๋ฅผ ์ฌ์ฉํด ์น ์์์ ์ ๊ทผํ ๋๋ querySelector(), querySelectorAll()์ ์์ฃผ ์ฌ์ฉํ๋ค.
์ด ํจ์๋ค์ document ๊ฐ์ฒด์ ํฌํจ๋์ด์๋ค.
๊ฐ์ฒด์ ํฌํจ๋ ํจ์๋ฅผ ๋ฉ์๋๋ผ๊ณ ๋ ํ๋๋ฐ ์ฌ๊ธฐ์๋ ํจ์๋ผ๊ณ ์นญํ๋ค.
document.querySelector(์ ํ์)
querySelector()๋ฅผ ์ด์ฉํ๋ฉด ์ง์ ํ ์ ํ์๋ฅผ ์ฌ์ฉํ ์์ ์ค์์ ์ฒซ ๋ฒ์งธ ์์์ ์ ๊ทผํ ์ ์๋ค
์) id="container"๋ฅผ ์ฌ์ฉํ ์์์ ์ ๊ทผํ๋ ค๋ฉด?
document.querySelector("#container")
querySelector()์์ class์ ํ์๋ ํ๊ทธ(ํ์
) ์ ํ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์ฝ๊ฐ ๋ค๋ฅด๋ค.
์น๋ฌธ์์์๋ class์ ํ์๋ ํ๊ทธ ์ ํ์๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ ์ ์์ง๋ง,
querySelector()๋ 1๊ฐ์ ์์๋ง ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์
class์ ํ์๋ ํ๊ทธ์ ํ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ ์ฉ๋ ์ฌ๋ฌ๊ฐ์ ์์ ์ค ์ฒซ ๋ฒ์งธ ์์๋ง ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
์) ์ด๋ฏธ์ง์ id๋ class์์ฑ์ด ์๋ค๋ฉด?
document.querySelector("img")
์) ์ด๋ฏธ์ง๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด?
๋จ์ํ imgํ์ ์คํ์ผ๋ก ์ ๊ทผํ ๊ฒ์ด ์๋๋ผ ํ์ ์ ํ์๋ฅผ ์ฌ์ฉํด ๊ตฌ์ฒด์ ์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด ์ข๋ค
(#profile์์ ์์ img๊ฐ ์๋ค)document.querySelector("#profile img")
document.querySelectorAll(์ ํ์)
querySelectorAll()๋ ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ ์ ์๋ค.
์) class="user"๋ค์ ์ฌ์ฉํ ์์์ ์ ๊ทผํ๋ ค๋ฉด?
document.querySelectorAll(".user")
์) user ํด๋์ค๋ค ์ค ์ธ๋ฒ์งธ ์์์ ์ ๊ทผํ๋ ค๋ฉด?
document.querySelectorAll(".user")[2]
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ๋ฉด ์น ์์์ ์ ๊ทผํ ํ ๋ด์ฉ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์์ ํ ์ ์๋ค.
์ด ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ innerTextํ๋กํผํฐ๋ innerHTMLํ๋กํผํฐ, textContentํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ค.
ํ๋กํผํฐ๋? ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์์ ์์ฑ์ ๋ํ๋ด๋ ์ฉ์ด์ด๋ค.
์น์์.innerText
์น์์.innerHTML
์น์์.textContent
์น๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋ณด์ด๋ ๋ด์ฉ๋ง ๊ฐ์ ธ์จ๋ค
display:none์ ์ฌ์ฉํ์ฌ ํ๋ฉด์์ ๊ฐ์ถ ์์์ ๋ด์ฉ์ ๊ฐ์ ธ์ค์ง ์๋๋ค.
์์ค์ ๊ณต๋ฐฑ์ด ์ฌ๋ฌ ๊ฐ ์
๋ ฅ๋์ด์์ด๋ ์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋ณด์ด๋ ๋๋ก ๊ณต๋ฐฑ 1์นธ๋ง ๊ฐ์ ธ์จ๋ค
document.querySelector("#desc").innerText
์์ ์์ ์๋ ํ๊ทธ์ ๋ด์ฉ์ ํจ๊ป ๊ฐ์ ธ์์ ๋ณด์ฌ์ค๋ค.
์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์๋ ์๊ด์์ด ์์ค์ ์๋๋๋ก ๊ฐ์ ธ์จ๋ค.
document.querySelector("#desc").innerHTML
์์์ ๋ด์ฉ์ ๊ฐ์ ธ์ค์ง๋ง ์น ๋ธ๋ผ์ฐ์ฒ ์ฐฝ์ ๋ณด์ด๋ ๋๋ก๊ฐ ์๋๋ผ ์์ค์ ์๋ ๋๋ก ๊ฐ์ ธ์จ๋ค.
์น ๋ฌธ์์๋ ํ๋ฉด์ ๋ณด์ด๋ ๊ฒ๋ณด๋ค ๋ง์ ๋ด์ฉ์ด ํฌํจ๋์ด์๊ณ ์ํฉ์ ๋ฐ๋ผ ์ผ๋ถ๋ฅผ ํ๋ฉด์์ ๊ฐ์ถ๊ธฐ๋ ํ๋ค.
์ด๋ ๊ฒ ๊ฐ์ถฐ์ง ์์๋ค๊น์ง ๊ฐ์ ธ์์ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ textContent์์ฑ์ด ํธ๋ฆฌํ๋ค.
์ฌ๋ฌ ์นธ์ ๊ณต๋ฐฑ๋ ๊ทธ๋๋ก ํ์ํ๋ค
document.querySelector("#desc").textContent
์ ๋ฆฌํ์๋ฉด,
์น ์์์ ๋ด์ฉ์ ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ : innerText๋ textContent ํ๋กํผํฐ๋ฅผ ์ฌ์ฉ
์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ํ์๋์ง ์๋ ๋ด์ฉ๊น์ง ๋ชจ๋ ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ : textContent ํ๋กํผํฐ๋ฅผ ์ฌ์ฉ
์์ ์์ ์๋ ํ๊ทธ๊น์ง ํจ๊ป ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ : innerHTML ํ๋กํผํฐ๋ฅผ ์ฌ์ฉ
์์ innerText, innerHTML, textContent ํ๋กํผํฐ๋ ์น ์์์ ๋ด์ฉ์ ๋ฐ๊ฟ๋๋ ์ฌ์ฉํ๋ค.
innerText, textContent๋ ํ
์คํธ ๋ด์ฉ์ ๋ฐ๊ฟ ๋
innerHTML์ HTML ํ๊ทธ๊ฐ ํฌํจ๋ ๋ด์ฉ์ ๋ฐ๊ฟ ๋ ์ฌ์ฉํ๋ค.
์น์์.innerText = ๋ด์ฉ
์น์์.innerHTML = ๋ด์ฉ
์น์์.textContent = ๋ด์ฉ
์) ์ด๋ฏธ์ง ์์์ ์ ๊ทผํ ํ src์์ฑ๊ฐ์ ๋ฐ๊พธ๋ฉด ์ด๋ฏธ์ง๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
์ด๋ src์์ฑ์ ์ด๋ฏธ์ง ๊ฐ์ฒด์ srcํ๋กํผํฐ๋ก ์ ๊ทผํ๋ฉด ๋๋ค์ด๋ฏธ์ง์์.src = ์ด๋ฏธ์ง ํ์ผ
ํด๋ฆญํ์ ๋ ๋์ํ๊ฒ ํ๋ ๋ฐฉ๋ฒ
onclick๋ณ์.onclick = ํจ์
์) title์ ํด๋ฆญํ์ ๋ title์ ๋ด์ฉ์ 'ํ๋กํ'๋ก ๋ฐ๊พธ๋ ค๋ฉด?
title.onclick = function(){ title.innerText = "ํ๋กํ" }
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ๋ฉด ์คํ์ผ ์์ฑ์ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ํ๋ ๊ฐ์ผ๋ก ์์ ํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด์ ์คํ์ผ์ ์์ ๋กญ๊ฒ ์์ ํ ์ ์์ผ๋ ์น ๋ฌธ์์์ ๋ค์ํ ํจ๊ณผ๋ฅผ ๋ง๋ค ์ ์๋ค.
CSS์์ฑ์ ์ ๊ทผํ๋ ค๋ฉด ์์์ ์ ๊ทผํ ํ ์์ฝ์ด .style๊ณผ CSS์์ฑ์ ์ฌ์ฉํด์ผ ํ๋ค
์์.style.์์ฑ๋ช
์) ๊ธ์์์ ์ ๊ทผํ๋ ค๋ฉด?
style.color
์) ๋ฐฐ๊ฒฝ์์ ์ ๊ทผํ๋ ค๋ฉด?
style.backgroundColor
์) ์ ๋ชฉ ๋ถ๋ถ์ ํด๋ฆญํ์ ๋ ๊ธ์์๊ณผ ๊ธ์์ ๋ฐฐ๊ฒฝ์์ ๋ฐ๊พธ์
const title = document.querySelector("#title"); title.onclick = () =>{ title.style.backgroundColor = "black"; title.style.color = "white" }
classList๋ DOM์์ ์์ฃผ ์ฌ์ฉํ๋ ํ๋กํผํฐ์ด๋ค.
์น ์์์ 2๊ฐ ์ด์์ ํด๋์ค ์คํ์ผ์ ์ ์ฉํ ์ ์๋ค.
<p class="user clicked">์ด๋ฆ: ๋๋ ๋ฏธ</p>
(user ๋ฐ๋ก clicked ๋ฐ๋ก ์์์ ๋ค๋ฅด๊ฒ ์ง์ ๋ ๊ฐ๋ฅํ๋ค)
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋์ค ์คํ์ผ์ ์ถ๊ฐ ๋๋ ์ญ์ ํ๋ฉด์ ๋ค์ํ ํจ๊ณผ๋ฅผ ๋ง๋ค ์ ์๋๋ฐ,
classList๋ผ๋ ํ๋กํผํฐ ๋๋ฌธ์ด๋ค.
classList๋ ์์์ ์ ์ฉํ ํด๋์ค ์คํ์ผ์ ๋ชจ๋ ๋ชจ์ ๋์ ํ๋กํผํฐ๋ค.
//classList ํ๋กํผํฐ ์ดํด๋ณด๊ธฐ <div id="desc"> <p class="user clicked">์ด๋ฆ: ๋๋ ๋ฏธ</p> <p class="user">์ฃผ์: ์ด๋๊ฐ</p> <p class="user">์ฐ๋ฝ์ฒ: ๋ญ</p> </div>
document.querySelector("#desc p").classList
*querySelector์จ์ ์ฒซ๋ฒ์งธ p์์ ํ๋๋ง ์ถ๋ ฅ๋จ
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ๋๋ง๋ค classList์ ํด๋์ค ์คํ์ผ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ฉด์ ์ฌ๋ฌ ๊ฐ์ง ํจ๊ณผ๋ฅผ ์ง์ ํ ์ ์๋ค.
์ด ๋ ์ถ๊ฐํ ์คํ์ผ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ด์ผ ํ๋ค.
ํด๋์ค ์คํ์ผ์ ์ถ๊ฐํ ๋ : add()
ํด๋์ค ์คํ์ผ์ ์ญ์ ํ ๋ : remove()
์์.classList.add(ํด๋์ค๋ช ) ์์.classList.remove(ํด๋์ค๋ช )
add()ํจ์
์) add()๋ฅผ ์ด์ฉํด .clicked ์คํ์ผ์ ์ถ๊ฐํ๋ค๋ฉด?.clicked{ background-color:yellow; color:blue; }
const title = document.querySelector("#title"); title.onclick = () =>{ title.classList.add("clicked") }
ํน์ ํด๋์ค ์คํ์ผ์ด ์๋ ์์๋ฅผ ์ฐพ์์ฃผ๋ contains()ํจ์
์์.classList.contains(ํด๋์ค๋ช )
contains()ํจ์๋ฅผ ํ์ฉํด์ .clicked ์คํ์ผ์ด ์๋์ง ํ์ธํ ํ
์์ผ๋ฉด .clicked๋ฅผ ์ถ๊ฐํ๊ณ ,
์์ผ๋ฉด .clicked๋ฅผ ์ญ์ ํ๋ค.const title = document.querySelector("#title"); title.onclick = () =>{ if(!title.classList.contains("clicked")){ title.classList.add("clicked") } else{ title.classList.remove("clicked") } }
ํด๋์ค ์คํ์ผ ํ ๊ธํ๊ธฐ
ํด๋ฆญํ ๋๋ง๋ค ํน์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๊ธฐ๋ฅผ ๋ฐ๋ณตํ ๊ฒฝ์ฐ์๋
classList์ toggle()ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ๋ค
(๊ทธ๋ผ ์์ ๋ด์์ใน ์ฑ๋ฌ๋ฏธใ ใด์ด๋ฆฌใ ใ ๋๋ฆฌใ )์์.classList.toggle(ํด๋์ค๋ช )
const title = document.querySelector("#title") title.onclick = () =>{ title.classList.toggle("clicked"); }