ํ์ฌ Codeit | JavaScript ์ค๊ธ๊ณผ์ ์ ์ค 'Browser์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋์'๋ถ๋ถ์ ํ์ต ์ค์ด๋ค. ์ด ๋ถ๋ถ์์ ์๋กญ๊ฒ ์๊ฒ ๋ ์ ๋ณด์ ์ค์ํ๋ค๊ณ ์๊ฐ๋๋ ๋ด์ฉ ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด ๋ด์ฉ๊ณผ ๊ด๋ จ๋ ๊ฐ๋จํ ์์ ์ฝ๋๋ฑ์ ์ ๋ฆฌํด๋ณด์๋ค.
๐โ๋ธ๋ผ์ฐ์ ๋ ๊ฐ์ฒด์ด๋ค?!
๊ฐ์ ๋ด์ฉ์์ ์ด๋ฐ ๋ง์ ๋ฃ๊ณ ๊ด๋ จ ๋ด์ฉ์ ๊ฒ์ํด๋ณด์๋๋ฐ, ๋จ์ํ '๋ธ๋ผ์ฐ์ =๊ฐ์ฒด'๊ฐ ์๋ ์น ๋ธ๋ผ์ฐ์ ๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ๊ฐ์ง๊ณ ์๋ค. ๋ผ๊ณ ํํํ๋๊ฒ ๋ง๋๊ฑฐ ๊ฐ๋ค.
๊ทธ๋ ๋ค๋ฉด ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ค์ ๋ฌด์์ผ๊น?
- window (์ต์์ ๊ฐ์ฒด)
- location
- navigator
- history
- screen
- document (DOM์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค)
์ด ์์ ๊ฐ์ฒด๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ ์น๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋, ์ฆ ์น๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ผ๊ณ ์ ์ํด๋ ๊ด์ฐฎ์ง ์์๊น ์ถ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด ์น๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ด ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ํตํด์ ๋ค์ํ ๋์์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด ์ฃผ๋ ๊ฑฐ ๊ฐ๋ค.
โwindow ๊ฐ์ฒด๋?
์น๋ธ๋ผ์ฐ์ ์ ์ต์์ ๊ฐ์ฒด์ด์ ์ ์ญ ๊ฐ์ฒด์ด๋ค.(global-object๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค)
ํ๋ง๋๋ก ๋ธ๋ผ์ฐ์ ๋ฅผ ๋๋ณํ๋ ๊ฐ์ฒด๊ฐ widnow ๊ฐ์ฒด์ธ ๊ฒ์ด๋ค.
console.log(window); //outputs:์ฝ์๋ก ํ์ธํ๋ฉด ์ ๋ง ๋ฌด์ํ ๋ง์ ํ๋กํผํฐ์ ๋ฉ์๋๋ค์ด ์ถ๋ ฅ๋๋ค.
์์ ์ฝ๋์ฒ๋ผ ์ฐ๋ฆฌ๊ฐ ํํ ์ฌ์ฉํ๋
console
์ญ์ window ๊ฐ์ฒด์ ํ๋กํผํฐ์ธ ๊ฒ์ด๋ค. ๊ตณ์ด consoleํ๋กํผํฐ ์์window.console.log()
์ฒ๋ผ window ๊ฐ์ฒด๋ฅผ ์์ ๋ถ์ด์ง ์๋ ์ด์ ๋ ๋ธ๋ผ์ฐ์ ์์๋ ์ด๋์๋ ์ ์ญ๊ฐ์ฒด์ธ window๋ฅผ ํ๊ณ ์๊ธฐ ๋๋ฌธ์console.log()
๋ผ๊ณ ์ณ๋ ์๋์ผ๋ก windowํ๋กํผํฐ์ธ์ง ์ธ์ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด๋ค์ ๋ค๋ฃจ๊ธฐ ๊ต์ฅํ ์ฉ์ดํ ์ธ์ด์ด๋ค. ๊ทธ๋ฐ๋งํผ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง ์ฌ๋ฌ ๊ฐ์ฒด๋ค๋ก ๋ค์ํ๊ฒ ํ์ฉ์ด ๊ฐ๋ฅํ ๊ฑฐ ๊ฐ๋ค.
โDOM(Document Object Model)์ด๋?
์๋จ์ ๋์จ ์น๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด ์ค ํ๋์ธ 'document ๊ฐ์ฒด'์ด๋ค.
์ฌ๊ธฐ์์ 'document ๊ฐ์ฒด'๋ ์น๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์๊ฐ ์ํ๋ ์ปจํ
์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ ์นํ์ด์ง์ HTML๋ฌธ์(ํ์ผ)์ ํด์ํ๋๋ฐ ๋ฐ๋ก ์ด๋ ์นํ์ด์ง์ DOM ๊ฐ์ฒด๋ฅผ ์์ฑ์์ผ์ค๋ค.
์ค์ง์ ์ธ HTML๋ฌธ์์ ๊ฐ๋ค์ด ๋ด๊ฒจ์ง DOM ๊ฐ์ฒด์ด๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ document
์ ๋ค์ํ ํ๋กํผํฐ์ ๋ฉ์๋๋ค์ ํตํด ๋ค์ํ ๋์๋ค์ ์ปจํธ๋กค์ด ๊ฐ๋ฅํด์ง๋ ๊ฒ์ด๋ค.
console.log(document); //outputs:window๊ฐ์ฒด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ํ ํ๋กํผํฐ์ ๋ฉ์๋๋ค์ด ์ถ๋ ฅ๋๋ค.
โDOM ํธ๋ฆฌ๋?
DOM๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด์์์ ๊ฐ ํ๊ทธ ๊ตฌ์กฐ์ ๊ฐ๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ค๋ค. ์ฌ๊ธฐ์์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ HTML๋ฌธ์์ ๋๊ฐ์ด '๋ถ๋ชจ'์ '์์'์ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ค๋ค๋ ์๋ฏธ์ด๋ค.
<!DOCTYPE html>
<html lang="ko">
<head>
<title>JS with me</title>
</head>
<body>
<h1>Hello JJuice</h1>
<p>Welcome</p>
</body>
</html>
์์ ๊ฐ์ html ์ฝ๋๋ฅผ DOM๊ฐ์ฒด๋ก ์์ฑํ๋ค๋ ๊ฒ์
๋ธ๋ผ์ฐ์ (window) >> document >> html >> head,body ์ ๊ฐ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ฌํ ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ถ๋ชจ,์์ ์์๋ค์ ๊ฐ์ฒด๋ก ๋ค๋ฃฌ๋ค.
๋ธ๋ผ์ฐ์ (window)๊ฐ์ฒด >> document๊ฐ์ฒด >> html๊ฐ์ฒด >> head,body๊ฐ์ฒด
์ด ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋
ธ๋(Node)๋ผ๊ณ ๋ ๋ถ๋ฆ
๋๋ค.
HTML๋ฌธ์๋ฅผ ๊ตฌ์ฑํ๋ ๋ ธ๋๋
- ๋ฌธ์ ๋ ธ๋(document node)
- ์์ ๋ ธ๋(element node)
- ์์ฑ ๋ ธ๋(attribute node)
- ํ ์คํธ ๋ ธ๋(text node)
- ์ฃผ์ ๋ ธ๋(comment node)
์ด๋ ๊ฒ 5๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค. ์ด ์ค์ ๋ํ์ ์ธ ๋ ธ๋์ธ '์์ ๋ ธ๋'์ 'ํ ์คํธ ๋ ธ๋'์ ๋ํด์ ์กฐ๊ธ ๋ ์์ธํ ์์๋ณด๊ณ ๋์ด๊ฐ์.
๋ ธ๋ ์ข ๋ฅ | ์ค๋ช | EX |
---|---|---|
์์ ๋ ธ๋ | ๋ชจ๋ HTML ์์๋ฅผ ๋งํ๋ค.์์ฑ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ ์ ์ผํ ๋ ธ๋ | head,title,body,h1๋ฑ |
ํ ์คํธ ๋ ธ๋ | ๋ชจ๋ ํ ์คํธ๋ฅผ ๋งํ๋ค. | title์์ ๋ ธ๋ ์์ JS with me ๊ฐ |
๋๋ถ๋ถ์ DOM๊ฐ์ฒด๋ ์์(Element) ๋ ธ๋์ ํ ์คํธ(text) ๋ ธ๋๋ก ๊ตฌ์ฑ์ด ๋์ด ์๋ค.
๊ทธ ๋ค์์ผ๋ก ๊ฐ ๋
ธ๋ ๊ฐ์ ๊ด๊ณ๋ก ๋งบ์ด์ ธ์๋ค.
๋
ธ๋๊ฐ์ ๊ด๊ณ์ ์ข
๋ฅ ํฌ๊ฒ 4๊ฐ์ง์ด๋ค.
- ๋ฃจํธ ๋ ธ๋(Root node)
- ๋ถ๋ชจ ๋ ธ๋(Parent node)
- ์์ ๋ ธ๋(Child Node)
- ํ์ ๋ ธ๋(Sibling Node)
๋ณดํต์ ์นํ์ด์ง HTML ํธ๋ฆฌ ๊ตฌ์กฐ์์ ๊ฐ์ฅ ์์๋ ๋ ๋ฃจํธ ๋ ธ๋๋ผ๊ณ ํ๋ค. ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ถ๋ชจ,์์,ํ์ ๋ ธ๋๋ ์ค์ง ๋จ ํ๋์ ๋ถ๋ชจ ๋ ธ๋๋ง์ ๊ฐ์ง ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์์ ๋ ธ๋๋ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ค.
<body>
<div>
<h1>Hello</h1>
<p>JJuice</p>
</div>
</div>
์์ ์ฝ๋๋ฅผ ๊ธฐ์ค์ ๋ดค์๋
<body>
์ ์์ ๋ ธ๋๋<div>
์ด๋ค.<h1>
์ ๋ถ๋ชจ ๋ ธ๋๋<div>
์ด๋ค.<div>
์ ์์ ๋ ธ๋์ธ<h1>
๊ณผ<p>
์ด ๋์ ๋ ธ๋๋ ํ์ ๋ ธ๋์ด๋ค.
DOMํธ๋ฆฌ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ค์ํ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ ธ๋์ ์ ๊ทผํด๋ณด์.
<html>
<head>
<title>JS ๋
ธ๋ ์ ๊ทผํด๋ณด๊ธฐ</title>
</head>
<body>
<h1>์ค๋ฒ์์น ์บ๋ฆญํฐ ์์๋ณด๊ธฐ</h1>
<ul id="tanker-list">
<li>๋ผ์ธํ๋ฅดํธ</li>
<li>์๋ฆฌ์ผ</li>
<li>์๊ทธ๋ง</li>
</ul>
<script src='index.js'></script>
</body>
</html>
index.jsํ์ผ์์ ์ํ๋ ๋ ธ๋๋ก ์ ๊ทผํด ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅ์์ผ๋ณด์.
โ ๋ถ๋ชจ,์์,ํ์ ๋ ธ๋ ๊ด๊ณ๋ฅผ ์ด์ฉํ๋ ํ๋กํผํฐ๋ฅผ ์ด์ฉํด ๋ ธ๋ ์ ๊ทผํด๋ณด๊ธฐ.
- ๋ถ๋ชจ ์์ ํ๋กํผํฐ : parentElement
- ์์ ์์ ํ๋กํผํฐ : children, firstElementChild, lastElementChild
- ํ์ ์์ ํ๋กํผํฐ : previousElementSibling , nextElementSibling
//index.js
//1.์์ ์์ ํ๋ฌํผํฐ
const tankerList = document.querySelector('#tanker-list');
console.log(tankerList.children[1]); //outputs: <li>์๋ฆฌ์ผ</li>
console.log(tankerList.lastElementChild); //outputs: <li>์๊ทธ๋ง<li>
//2.๋ถ๋ชจ ์์ ํ๋กํผํฐ
console.log(tankerList.parentElement); //outputs: <body>...</body>
//3.ํ์ ์์ ํ๋กํผํฐ
console.log(tankerList.previousElementSibling); //outputs:<h1>์ค๋ฒ์์น ์บ๋ฆญํฐ ์์๋ณด๊ธฐ</h1>
console.log(tankerList.nextElementSibling); //outputs:<script...></script>
<ul id="tanker-list">
์ ์์๋ค์<li></li> x 3
๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ index์ ๊ฐ์ด ๋๊ฐ๋ก ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด ๋ ธ๋์ ์ ๊ทผํ ์ ์๋ค.- ์ถ๋ ฅ๊ฐ์ ํด๋นํ๋ ์์ ๋ ธ๋(element node)๋ฅผ ๊ฐ์ ธ์จ ๊ฒ์ด๋ค.
- ํน์๋ ์์ ๋
ธ๋๊ฐ ์๋ ํ
์คํธ ๋
ธ๋๊ฐ์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด
textContent
ํ๋กํผํฐ๋ฅผ ์ด์ฉํ๋ฉด ์๋ ์ฝ๋์ ๊ฐ์ด ์์ ๋ ธ๋๊ฐ ์๋ ํ ์คํธ ๋ ธ๋๊ฐ๋ง์ ์ถ๋ ฅํ ์ ์๋ค.
console.log(tankerList.firstElementChild.textContent); //outputs:๋ผ์ธํ๋ฅดํธ
- ์์,๋ถ๋ชจ,ํ์ ํ๋กํผํฐ๋ฅผ ๊ฐ์ด ์ฌ์ฉํด์ ๋ ธ๋๊ฐ์ ์ ๊ทผํ ์๋ ์๋ค.
console.log(tankerList.children[1].previousElementSibling); //outputs:<li>๋ผ์ธํ๋ฅดํธ</li>
โ innerHTML, outerHTML, textContent ํ๋กํผํฐ๋ฅผ ์ด์ฉํด ๋ ธ๋ ์ ๊ทผํด๋ณด๊ธฐ.
const tankerList = document.querySelector('#tanker-list');
console.log(tankerList.innerHTML); //outputs: <li>...</li> x 3
console.log(tankerList.outerHTML); //outputs: <ul id='...'><li>...</li> x3 </ul>
console.log(tankerList.textContent); //outpust: ๋ผ์ธํ๋ฅดํธ ์๋ฆฌ์ผ ์๊ทธ๋ง
์์ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ ์๋ฏ์ด
- innerHTML : ์ ๊ทผํ ๋ ธ๋ ์์๋ค์ ์์ ๋ ธ๋๊ฐ + ํ ์คํธ ๋ ธ๋๊ฐ์ ๊ฐ์ ธ์จ๋ค.(์์์์ ์ค๋ฐ๊ฟ์ด๋ ๋ค์ฌ์ฐ๊ธฐ ์ ๋ถ ๊ฐ์ ธ์จ๋ค)
- outerHTML : ์ ๊ทผํ ๋ ธ๋ ์์ ๋ ธ๋๊ฐ + ์์๋ค์ ์์ ๋ ธ๋๊ฐ + ํ ์คํธ ๋ ธ๋๊ฐ์ ๊ฐ์ ธ์จ๋ค.(์์์์ ์ค๋ฐ๊ฟ์ด๋ ๋ค์ฌ์ฐ๊ธฐ ์ ๋ถ ๊ฐ์ ธ์จ๋ค)
- textContent : ์ ๊ทผํ ๋ ธ๋ ์์๋ค์ ์์ ๋ ธ๋๊ฐ์์ ํ ์คํธ ๋ ธ๋๊ฐ๋ง์ ๊ฐ์ ธ์จ๋ค.
์ 3๊ฐ์ ํ๋กํผํฐ๋ ๋ ธ๋์ ์ ๊ทผํ๋ ๊ฒ ๋ง๊ณ ๋ ๋ ธ๋๊ฐ์ ์์ ์ด ๊ฐ๋ฅํ๋ค.
tankerList.innerHTML = '<li>๋ ํน๋ณผ</li>'; //๊ธฐ์กด์ 3๊ฐ์ <li>๊ฐ์ด ์ฌ๋ผ์ง๊ณ ์๋ก์ด innerHTML๊ฐ์ผ๋ก ์ถ๋ ฅ๋๋ค.
tankerList.outerHTML = '<li>๋๋ฐ</li>'; //๊ธฐ์กด์ <ul id...><li>..</li></ul> ๋
ธ๋๊ฐ ์ ๋ถ ์ฌ๋ผ์ง๊ณ outerHTML ๊ฐ์ผ๋ก ์ถ๋ ฅ๋๋ค.
tankerList.textContent = '<li>๋ก๋ํธ๊ทธ</li>'; //โ์ฃผ์ํ ์ :textContent ํ๋กํผํฐ๊ฐ์ ํ๊ทธ,์ฆ ๊ธฐ๋ณธ ์์๊ฐ์ด ๋ค์ด๊ฐ๋ฉด ์์๊ฐ ์๋ ํ
์คํธ๋ก ์ธ์ํ๋ค. ๊ทธ๋ ๊ธฐ์ ์ค์ ๋ณด์ฌ์ง๋ ๊ฐ์ '๋ก๋ํธ๊ทธ'๊ฐ ์๋ '<li>๋ก๋ํธ๊ทธ</li>`๊ฐ ์ ์ฒด๊ฐ ๋ณด์ฌ์ง๋ค.
ํน์๋ ๊ธฐ์กด์ <li>
๊ฐ์ ์ ์งํ์ฑ ๊ฐ์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด
//<li>์๊ทธ๋ง</li> ๋ค์์ ๊ฐ ์ถ๊ฐ
tankerList.innerHTML = tankerList.innerHTML + '<li>๋ ํน๋ณผ</li>';
tankerList.innerHTML += '<li>๋ ํน๋ณผ</li>';
//<li>๋ผ์ธํ๋ฅดํธ</li> ์์ ๊ฐ ์ถ๊ฐ
tankerList.innerHTML = '<li>๋ ํน๋ณผ</li>' + tankerList.innerHTML;
outerHTML ๊ฐ์ ๊ฒฝ์ฐ ํด๋นํ๋ ์์ ๋ ธ๋๋ถํฐ ์์๋ค์ ๋ ธ๋๊น์ง ๊ฐ์ด ์์ ๋๊ธฐ ๋๋ฌธ์ ์กฐ์ฌํด์ผ ํ๋ค.
//๊ธฐ์กด์ <ul id='#tanker-list'>๋ ์ญ์ ๋๋ค.
tankerList.outerHTML = '<li>์์คํด</li>';
//์๋ก์ด <ul>๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐํ๋ค.
tankerList.outerHTML += '<ul><li>๋๋ฐ</li><li>๋ ํน๋ณผ</li></ul>';
'๋ธ๋ผ์ฐ์ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋์ ์์๋ณด๊ธฐ.1' ์ฒซ ๋ฒ์งธ ํฌ์คํธ๋ ์ฌ๊ธฐ์์ ๋ง๋ฌด๋ฆฌ ํ๊ณ ๋ค์ ํฌ์คํธ์์๋ ์ง์ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐ / ๋ ธ๋ ์ญ์ ์ ์ด / HTML ํ์ค ์์ฑ(attribute) ๋ค๋ฃจ๊ธฐ / CSS Style ๋ค๋ฃจ๊ธฐ / HTML ๋นํ์ค ์์ฑ ๋ค๋ฃจ๊ธฐ๋ฅผ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋์ ์์๋ณด๊ธฐ.2
'๐ WELL-DONE Project > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
this ๊ฐ๋ ์ดํดํ๊ธฐ (0) | 2021.02.17 |
---|---|
๋ธ๋ผ์ฐ์ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋์ ์์๋ณด๊ธฐ.2 (0) | 2020.12.18 |
HTML์์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์๋ณด๊ธฐ. (0) | 2020.12.15 |
์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด(String) ์ตํ๊ธฐ - ๋ฐฐ์ด(Array)๊ณผ ๊ณตํต์ &์ฐจ์ด์ (0) | 2020.12.08 |