DOM ๊ธฐ์ด
DOM์ด๋? Document Object Model์ ์ฝ์๋ก, HTML ์์๋ฅผ JavaScript ๊ฐ์ฒด์ฒ๋ผ ์กฐ์ํ ์ ์๋ ๋ชจ๋ธ์ ๋งํ๋ค.
โ๏ธ HTML์ JavaScript ์ ์ฉํ๊ธฐ
HTML์ JavaScript์์ ์กฐ์ํ๊ธฐ ์ํด์๋ HTML ๋ฌธ์์ JavaScript ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํด์ฃผ์ด์ผ ํ๋ค. ์ด ๋ HTML ๋ฌธ์ ๋ด์ <script>
ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ JavaScript๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๋ค.
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฑ๋ ์ฝ๋๋ฅผ ํด์ํ๋ ๊ณผ์ ์์ <script>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด, ์น ๋ธ๋ผ์ฐ์ ๋ HTML ํด์์ ๋ฉ์ถ๊ณ <script>
ํ๊ทธ๋ฅผ ๋จผ์ ์คํํ๋ค. <script>
ํ๊ทธ๋ ๋ฑ์ฅ๊ณผ ํจ๊ป ์คํ๋๋ค.
<script>
ํ๊ทธ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
<head>
ํ๊ทธ ์์ ์ถ๊ฐ
<html>
<head>
<script src="javascript.js"></script>
</head>
<body>
<h2>Hello JavaScript!</h2>
</body>
</html>
<head>
ํ๊ทธ ์์ <script>
ํ๊ทธ๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ, <body>
ํ๊ทธ ๋ด๋ถ๋ฅผ ํด์ํ๊ธฐ ์ <script>
ํ๊ทธ๋ฅผ ๋จผ์ ํด์ํ๊ธฐ ๋๋ฌธ์ JavaScript์์ <body>
ํ๊ทธ ๋ด๋ถ์ ์์๋ฅผ ์ฐธ์กฐํ ๊ฒฝ์ฐ ์ฝ์ด๋ค์ด์ง ๋ชปํ๋ค.
<head>
ํ๊ทธ ์์<script>
ํ๊ทธ๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ, ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์์ ํ ํํ๋ก ๋ณด์ด์ง๋ง js ํ์ผ ์ฉ๋์ด ํฌ๊ณ ์ธํฐ๋ท ์๋๊ฐ ๋๋ฆฌ๋ค๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ณด๊ธฐ๊น์ง ๋ง์ ์๊ฐ์ด ์์๋๋ค.
<body>
ํ๊ทธ ๋์ ์ถ๊ฐ
<html>
<head>
</head>
<body>
<h2>Hello JavaScript!</h2>
<script src="javascript.js"></script>
</body>
</html>
<body>
ํ๊ทธ ์์ <script>
ํ๊ทธ๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ, <body>
ํ๊ทธ ๋ด๋ถ๋ฅผ ํด์ํ๊ณ <script>
ํ๊ทธ๋ฅผ ํด์ํ๊ธฐ ๋๋ฌธ์ JavaScript์์ <body>
ํ๊ทธ ๋ด๋ถ ์์๋ฅผ ์ฐธ์กฐํด๋ ์ฝ์ ์ ์๋ค.
<body>
ํ๊ทธ ์์<script>
ํ๊ทธ๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ์ ๋ด์ฉ์ ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์์ผ๋ HTML ์ฝ๋๊ฐ js์ ์์กด์ ์ด๋ผ๋ฉด ์๋ฏธ์๋ ํ๋ฉด์ ๋ณด๊ธฐ๊น์ง๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์๋ค.
<head>
ํ๊ทธ ์์defer
์์ฑ๊ณผ ํจ๊ป ์ถ๊ฐ
<html>
<head>
<script defer src="javascript.js"></script>
</head>
<body>
<h2>Hello JavaScript!</h2>
</body>
</html>
<script>
ํ๊ทธ ๋ด์ defer
์์ฑ์ ์ถ๊ฐํ๋ฉด HTML ํด์์ด ์ค๋จ๋์ง ์๊ณ js ํ์ผ์ ๋ณ๋ ฌ์ ์ผ๋ก ๋ค์ด๋ก๋ ํ ์คํ๋๋ค.
<head>
ํ๊ทธ ์์<script>
ํ๊ทธ๋ฅผdefer
์์ฑ๊ณผ ํจ๊ป ์ถ๊ฐํ ๊ฒฝ์ฐ, HTML ํด์๊ณผ<script>
ํ๊ทธ ํด์์ด ๋์์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ณผ ์ ์๋ค.
โ๏ธ DOM์ผ๋ก ์์์์, ๋ถ๋ชจ์์ ์ถ๋ ฅํ๊ธฐ
console.dir(document.body.children); // <body>์ ์์์์๋ค์ ๊ฐ์ฒด์ฒ๋ผ ์ถ๋ ฅ(console.dir)
console.dir(document.body.parentElement); // <body>์ ๋ถ๋ชจ์์๋ฅผ ๊ฐ์ฒด์ฒ๋ผ ์ถ๋ ฅ
<body>
์ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ..., n ๋ฒ์งธ ์์๋ง ์กฐํํ๋ ค๋ฉดdocument.body.children[n-1]
๋ก ์กฐํํ๋ฉด ๋๋ค.
DOM ๋ค๋ฃจ๊ธฐ
โ๏ธ DOM ๊ธฐ๋ณธ ๋ฉ์๋
CRUD
CRUD๋? ๋ง๋ค๊ณ (Create) ์กฐํํ๊ณ (Read) ๊ฐฑ์ ํ๊ณ (Update) ์ญ์ ํ๋(Delete) ๊ฒ์ ๋งํ๋ค.
- CREATE
document.createElement('div'); // <div> ์์๋ฅผ ๋ง๋ ๋ค.
- READ
document.querySelector('.tweet'); // class="tweet"์ธ ์์ ์ค ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์กฐํํ๋ค.
document.querySelectorAll('.tweet'); // class="tweet"์ธ ๋ชจ๋ ์์๋ฅผ ์ ์ฌ ๋ฐฐ์ด๋ก ์กฐํํ๋ค.
์ด์ ๋ฒ์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ํ ์๋ ๋ฐฉ์ READdocument.getElementById('tweet');
// document.querySelector('#tweet')์ ๋์ผdocument.getElementsByClassname('tweet');
// document.querySelector('.tweet')์ ๋์ผ
- UPDATE
document.querySelector('.tweet').textContent = 'tweet';
// class="tweet"์ธ ์์ ์ค ์ฒซ ๋ฒ์งธ ์์์ ๋ฌธ์์ด์ 'tweet'์ผ๋ก ๋ณ๊ฒฝํ๋ค.(update)
const newTweet = document.createElement('div');
newTweet.classList.add('tweet'); // newTweet์ class="tweet"์ ์ถ๊ฐํ๋ค.(update)
document.body.append(newTweet); // newTweet์ <body>์ ์์์์๋ก ์ถ๊ฐํ๋ค.(update)
- DELETE
newTweet.classList.remove('tweet') // newTweet์ class="tweet"๋ฅผ ์ญ์ ํ๋ค.
newTweet.remove(); // newTweet ์์๋ฅผ ์ญ์ ํ๋ค.
document.body.removeChild(document.body.firstChild); // body์ ํน์ ์์์์(์ฒซ ๋ฒ์งธ)๋ง ์ญ์ ํ๋ค.
removeChild
์while
,forEach
,let of
๋ฌธ์ ์ด์ฉํด ์์์์ ์ฌ๋ฌ๊ฐ๋ฅผ ์ญ์ ํ ์ ์๋ค.
์ด๋ฒคํธ ๊ฐ์ฒด
๋ด์ฉ
'๐ถ FE 41๊ธฐ > Review' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[S2U2] JavaScript ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (1) | 2022.09.21 |
---|---|
[S2U1] JavaScript ๊ณ ์ฐจ ํจ์ (0) | 2022.09.20 |
[S1U10] JavaScript ํต์ฌ ๊ฐ๋ ๊ณผ ์ฃผ์ ๋ฌธ๋ฒ (0) | 2022.09.07 |
[S1U9] JavaScript ๋ฐฐ์ด, ๊ฐ์ฒด (0) | 2022.09.05 |
[S1U8] Linux/Git ๊ธฐ์ด (0) | 2022.09.01 |