DOM (Document Object Model)
DOM์ HTML ๋ฌธ์๋ฅผ ํ์ฑํ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.
HTML ๋ฌธ์์ ๊ณ์ธต์ ๊ตฌ์กฐ์ ์ ๋ณด๋ฅผ ํํํ๋ฉฐ ์ด๋ฅผ ์ ์ดํ ์ ์๋ API, ์ฆ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
HTML ์์๋ฅผ Object(JavaScript Object)์ฒ๋ผ ์กฐ์(Manipulation)ํ ์ ์๋ Model์ด๋ค. ์ฆ, JavaScript๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด, DOM์ผ๋ก HTML์ ์กฐ์ํ ์ ์๋ค.
DOM์ ๊ฐ๋ ์ ์ดํดํ๋ค.
DOM์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ณ , HTML๊ณผ DOM์ด ์ด๋ป๊ฒ ๋ฎ์์๋์ง ์ดํดํ๋ค.
HTML์์ JavaScript ํ์ผ์ ๋ถ๋ฌ์ฌ ๋ ์ฃผ์์ ์ ๋ํด์ ์ดํดํ๋ค.
[์ฌํ]DOM๊ณผ JavaScript์ ์ฐจ์ด์ ๋ํด ์ดํดํ ์ ์๋ค.
HTML์ JavaScript๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์๋ <script> ํ๊ทธ๋ฅผ ์ด์ฉํ๋ค.
<script src="ํ์ผ๋ช
.js"></script>
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฑ๋ ์ฝ๋๋ฅผ ํด์ํ๋ ๊ณผ์ ์์ <script> ์์๋ฅผ ๋ง๋๋ฉด, ์น ๋ธ๋ผ์ฐ์ ๋ HTML ํด์์ ์ ์ ๋ฉ์ถ๋ค.
HTML ํด์์ ์ ์ ๋ฉ์ถ ์น ๋ธ๋ผ์ฐ์ ๋ <script> ์์๋ฅผ ๋จผ์ ์คํํ๋ค.
<script> ์์๋ ๋ฑ์ฅ๊ณผ ํจ๊ป ์คํ๋๋คโญ๏ธ
์๋ฐ์คํฌ๋ฆฝํธ์์ DOM์ document ๊ฐ์ฒด์ ๊ตฌํ๋์ด ์๋ค.
๋ธ๋ผ์ฐ์ ์์ ์๋๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์๋, ์ด๋์์๋ document ๊ฐ์ฒด๋ฅผ ์กฐํํ ์ ์๋ค.
๋ถ๋ชจ, ์์, ํ์ ์ฐพ๊ธฐ, ์ ํํ๊ธฐ (childNodes, parentNode, Sibling)
<div id=mother>
<div id=one></div>
<div id=two></div>
<div id=three></div>
</div>
๋ถ๋ชจ๊ฐ ์์ ์ฐพ๊ธฐchildNodes
// ๋ถ๋ชจ ์์ฑ
var mother = document.getElementById('mother');
// ๋ชจ๋ ์์ ์ฐพ๊ธฐ
var every = mother.childNodes;
// ์ฒซ๋ฒ์งธ ์์ ์ฐพ๊ธฐ
var one = mother.firstChild;
// ์ธ๋ฒ์งธ ์์ ์ฐพ๊ธฐ
var three = mother.lastChild;
์์์ด ๋ถ๋ชจ ์ฐพ๊ธฐ parentNode
var one = document.getElementById('one');
var mother = one.parentNode;
ํ์ ์ฐพ๊ธฐ Sibling
var one = document.getElementById('one');
var two = one.nextSibling;
var one = two.previousSibling;
์ถ์ฒ: https://itun.tistory.com/501 [Bino]
DOM ๋ค๋ฃจ๊ธฐ
CRUD(Create, Read, Update and Delete)๋ฅผ ์ดํดํ ํ ์ธ์ธํ ๋ฉ์๋๋ฅผ ์์!
DOM์ JavaScript๋ก ์กฐ์ํ์ฌ HTML Element๋ฅผ ์ถ๊ฐํ ์ ์๋ค. (CREATE)
DOM์ JavaScript๋ก ์กฐ์ํ์ฌ HTML Element๋ฅผ ์กฐํํ ์ ์๋ค. (READ)
DOM์ JavaScript๋ก ์กฐ์ํ์ฌ HTML Element๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. (UPDATE)
DOM์ JavaScript๋ก ์กฐ์ํ์ฌ HTML Element๋ฅผ ์ญ์ ํ ์ ์๋ค. (DELETE)
์์ฑํ HTML Element๋ฅผ ๋ถ๋ชจ ์๋ฆฌ๋จผํธ์ ์์ ์๋ฆฌ๋จผํธ๋ก ํฌํจํ ์ ์๋ค. (APPEND)
innerHTML๊ณผ textContent์ ์ฐจ์ด๋ฅผ ์ดํดํ๋ค.
์ฌํ
DOM๊ณผ JavaScript์ ์ฐจ์ด์ ๋ํด ์ดํดํ ์ ์๋ค.
createDocumentFragment๋ฅผ ํ์ฉํ์ฌ, ๋ ํจ์จ์ ์ผ๋ก DOM์ ์ ์ดํ ์ ์๋ค.
HTML5 template tag ์ฌ์ฉ๋ฒ์ ์ดํดํ ์ ์๋ค.
element์ node์ ์ฐจ์ด๋ฅผ ์ดํดํ ์ ์๋ค.
children๊ณผ childNodes์ ์ฐจ์ด๋ฅผ ์ดํดํ ์ ์๋ค.
remove์ removeChild์ ์ฐจ์ด๋ฅผ ์ดํดํ ์ ์๋ค.
๊ฐ์ ์๋ฆฌ๋จผํธ๋ฅผ appendChild ํ๋ฉด, ๊ธฐ์กด ์๋ฆฌ๋จผํธ๋ฅผ ๋ณต์ฌํ ๊น?
offsetTop ๋ฑ์ ์ด์ฉํ์ฌ ์ขํ ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๋ค.
offsetWidth ๋ฑ์ ์ด์ฉํ์ฌ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๋ค.
*๋ ๋ ํธ๋ฆฌ๋ ๋ ๋๋ง์ ์ํ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. (๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ ๋๋ง๋๋ ๋ ธ๋๋ง์ผ๋ก ๊ตฌ์ฑ๋๋ค.)
ex) meta ํ๊ทธ, scriptํ๊ทธ, display:none ๋ฑ์ ๋ ธ๋์ ํฌํจ๋์ง ์๋๋ค.
DOM์ JavaScript๋ก ์กฐ์ํ์ฌ HTML Element๋ฅผ ์ถ๊ฐ (CRUD) .createElement()
โ๏ธ ์๋ก์ด <div> ์์๋ฅผ ๋ง๋ค๊ธฐ ๐
document.createElement('div')
CREATE์์ ์์ฑํ tweetDiv๋ฅผ *ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ฐ๊ฒฐํ๊ธฐ .append()
<๊ธฐ์กด html>
1. 'div'์์ (element)๋ฅผ ์์ฑํด์ tweetDiv ๋ณ์์ ๋ฃ์ด์ค๋ค.
2. body ์์ ๋ฃ์ด์ค๋ค.
<div>๊ฐ body ์์ ๋ค์ด๊ฐ๋ค!
id๊ฐ contianer์ธ <div>์๋ ํ์ ์ด๋ค.
DOM์ JavaScript๋ก ์กฐ์ํ์ฌ HTML Element๋ฅผ ์กฐํ (CRUD) querySelector
HTML ์์("div"), id("#tweetList"), class(.tweet)๊ฐ ๋ง์ด ์ฌ์ฉ๋๋ค.
const getOneTweet = document.getElementById('container')
const queryOneTweet = document.querySelector('#container')
<div>๋ฅผ ์์ฑํด์ id๊ฐ contianer์ธ <div>์์ ๋ฃ์ด๋ณด์!
1. id๊ฐ contianer์ธ ์์๋ฅผ ์ฐพ์์ container๋ผ๋ ๋ณ์์ ๋ฃ์ด์ฃผ์.
2. <div>๋ฅผ ์์ฑํด์ tweetDiv๋ผ๋ ๋ณ์์ ๋ฃ์ด์ฃผ์.
3. container์ append๋ฅผ ์ฌ์ฉํด์ tweetDiv๋ฅผ ๋ฃ์!
DOM์ JavaScript๋ก ์กฐ์ํ์ฌ HTML Element๋ฅผ ๋ณ๊ฒฝ (CRUD) .textContent = '';
โ๏ธ 'div' ์์ ์์ ํ, textContent๋ฅผ ์ด์ฉํด ๋ฌธ์์ด์ ์ ๋ ฅํ๊ธฐ ๐
const oneDiv = document.createElement('div');
oneDiv.textContent = 'dev';
console.log(oneDiv) // <div>dev</div>
โ๏ธ classList.add๋ฅผ ์ด์ฉํด 'tweet' ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ธฐ๐
oneDiv.classList.add('tweet')
console.log(oneDiv) // <div class="tweet">dev</div>
์ถ๊ฐ๊ณต๋ถ
.setAttribute() => ์์์ ์์ฑ ๊ฐ์ ์ ํ๋ ๋ฉ์๋
element.setAttribute( 'attributename', 'attributevalue' )
โฌ๏ธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ
attributename์๋ ์์ฑ ์ด๋ฆ์, attributevalue์๋ ์์ฑ๊ฐ์ ๋ฃ๋๋ค.
document.getElementById( 'xyz' ).setAttribute( 'title', 'This is title' )
id๊ฐ 'xyz'์ธ ์์์ ์์ฑ ์ด๋ฆ์ title๋ก, ์์ฑ๊ฐ์ 'This is title'๋ก ์ ํ๋ค.
๋ง์ฝ ์ด๋ฏธ ์์ฑ๊ฐ์ด ์กด์ฌํ๋ค๋ฉด ๊ทธ ๊ฐ์ ์ง์ฐ๊ณ ์ ๊ฐ์ ์ ์ฉํ๋ค.
DOM์ JavaScript๋ก ์กฐ์ํ์ฌ HTML Element๋ฅผ ์ญ์ (CRUD)
1-1. ์ญ์ ํ๋ ค๋ ์์์ ์์น๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ
const container = document.querySelector('#container')
const tweetDiv = document.createElement('div')
container.append(tweetDiv)
tweetDiv.remove() // ์ด๋ ๊ฒ append ํ๋ ์์๋ฅผ ์ญ์ ํ ์ ์๋ค.
1-2. ์ญ์ ํ class ์ด๋ฆ์ ์๋ ๊ฒฝ์ฐ classList.remove('class name');
let elFailureMessage = document.querySelector('.failure-message');
console.log(elFailureMessage);
elFailureMessage.classList.remove('hide');
2-1. ์ฌ๋ฌ ๊ฐ์ ์์ ์์๋ฅผ ์ง์ธ ๋ innerHTML
document.querySelector('#container').innerHTML = '';
๐ดํ์ง๋ง innerHTML์ ์ฌ์ดํธ์ ๊ณต๊ฒฉ ๊ฒฝ๋ก๊ฐ ๋์ด ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ด ๋ฐ์ํ ์ ์๋ค๊ณ ํ๋ค. //
์ฐธ๊ณ )<script> ์์๋ฅผ ์ฌ์ฉํ๋ฉด harmless!!
๋ฐ๋ผ์ ์ผ๋ฐ ํ ์คํธ๋ฅผ ์ฝ์ ํ ๋๋ innerHTML ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค. ๋์ ์ ๋ฌ ๋ ๋ด์ฉ์ HTML๋ก ํ์ฑํ์ง ์๊ณ ์์ ํ ์คํธ(raw text)๋ก ์ฝ์ ํ๋ Node.textContent๋ฅผ ์ฌ์ฉ์ ๊ถ๊ณ ํ๋ค.
2-2. ์ฌ๋ฌ ๊ฐ์ ์์ ์์๋ฅผ ์ง์ธ ๋ removeChild
const container = document.querySelector('#container');
while (container.firstChild) {
container.removeChild(container.firstChild);
}
=> removeChild ์ while ์ ์ด์ฉํด ์์ ์์๋ฅผ ์ญ์ ํ๋ฉด, ์ ๋ชฉ์ ํด๋นํ๋ H2 "Tweet List"๊น์ง ์ญ์ ๋๋ค.
3-1. ๋ถ๋ถ์ญ์ ํ๊ธฐ
container์ ์์ ์์๊ฐ 1๊ฐ๋ง ๋จ์ ๋๊น์ง, ๋ง์ง๋ง ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ธฐ ๐
const container = document.querySelector('#container');
while (container.children.length > 1) {
container.removeChild(container.lastChild);
}
3-2. ๋ถ๋ถ์ญ์ ํ๊ธฐ
ํด๋์ค ์ด๋ฆ์ด tweet์ธ ์์๋ง ์ฐพ์์ ์ ๊ฑฐํ๊ธฐ ๐
const tweets = document.querySelectorAll('.tweet')
tweets.forEach(function(tweet){
tweet.remove();
})
or
const tweets = document.querySelectorAll('.tweet')
for (let tweet of tweets){
tweet.remove()
}
์ถ๊ฐ๊ณต๋ถ ํ์
forEach
'๐Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL) innerHTML ๋ฉ์๋์ textContent ๋ฉ์๋์ ์ฐจ์ด์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์. (0) | 2022.05.23 |
---|---|
TIL) ์น ์ ํจ์ฑ ๊ฒ์ฌ, ๊ด์ฌ์ฌ ๋ถ๋ฆฌ (0) | 2022.05.18 |
์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ ์ ์๋ 7๊ฐ์ง (0) | 2022.05.17 |
TIL) ์๋ฐ์คํฌ๋ฆฝํธ prompt ํจ์, prompt ์ฌ์ฉ (0) | 2022.05.15 |
TIL) ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์์ ๊ผญ ์์์ผํ๋ for in ๊ณผ Object.keys() (0) | 2022.05.15 |