๐ป DOM(Document Object Model)
๐จ๐ปโ๐ป ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(Document Object Model: DOM)
DOM์ XML
์ด๋ HTML
๋ฌธ์์ ์ ๊ทผํ๊ธฐ ์ํ ์ผ์ข
์ ์ธํฐํ์ด์ค
์ด๋ค. DOM์ ์นํ์ด์ง ๋ด์ ๋ชจ๋ ์์๋ฅผ ์ ์ํ๊ณ ๊ฐ์ฒด๋ก ๋ํ๋ด์ค๋ค. ๋ํ, ๊ฐ๊ฐ์ ์์์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
์ ์ ๊ณตํ๋ค.
HTML ์ ์งํฑํ๋ ๊ฒ์ ํ๊ทธ(tag)
์ด๋ค.
DOM์ ๋ฐ๋ฅด๋ฉด, ๋ชจ๋ HTML ํ๊ทธ๋ ๊ฐ์ฒด์ด๋ค.
ํ๊ทธ ํ๋๊ฐ ๊ฐ์ธ๊ณ ์๋ ์์ ํ๊ทธ๋ ์ค์ฒฉ ํ๊ทธ(nested tag)
๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ๊ทธ ๋ด์ ๋ฌธ์(text)์ญ์ ๊ฐ์ฒด์ด๋ค.
์์ ์ธ๊ธ๋ ๋ชจ๋ ๊ฐ์ฒด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ ๊ทผ
ํ ์ ์๊ณ , ํ์ด์ง๋ฅผ ์กฐ์ํ ๋ ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. ์๋ก, document.body๋ <body>
ํ๊ทธ๋ฅผ ๊ฐ์ฒด๋ก ๋ํ๋ธ ๊ฒ์ด๋ค.
document ๊ฐ์ฒด๋ ํ์ด์ง์ ๊ธฐ๋ณธ ์ง์
์ ์ญํ
์ ํ๋ค.
document . body . style . background = "red" ;
setTimeout ( ( ) => {
document . body . style . background = "" ;
} , 3000 ) ;
์ ์์ ๋ document.body์ ๋ฐฐ๊ฒฝ์์ ๋ฐ๊พธ๊ธฐ ์ํด style.background
๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด์ธ์๋ ๋ค์ํ ํ๋กํผํฐ๊ฐ ์กด์ฌํ๋ค. ์๋ก ๋ค์ด, innerHTML
(ํด๋น ๋
ธ๋์ HTML ์ฝํ
์ธ ), offsetWidth
(ํด๋น ๋
ธ๋์ ๋๋น[ํฝ์
]) ๋ฑ์ด ์๋ค.
<!DOCTYPE html>
< html >
< head >
< title > ์ฌ์ด์ ๊ดํ์ฌ</ title >
</ head >
< body >
์ฌ์ด์ ๊ดํ ์ง์ค.
</ body >
</ html >
์์ ๊ฐ์ html ๋ฌธ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด DOM ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
DOM์ HTML์ ์์ ๊ฐ์ด ํ๊ทธ ํธ๋ฆฌ ๊ตฌ์กฐ
๋ก ํํํ๋ค. ์์์ ์ธ๊ธํ๋ฏ์ด ํธ๋ฆฌ์ ์๋ ๋
ธ๋๋ ๋ชจ๋ ๊ฐ์ฒด
์ด๋ค.
ํ๊ทธ๋ ์์ ๋
ธ๋ (element node)์ด๊ณ , ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๋ค. <html>
์ ๋ฃจํธ ๋
ธ๋๊ฐ ๋๊ณ , <head>
์ <body>
๋ ๋ฃจํธ ๋
ธ๋์ ์์ ๋
ธ๋๊ฐ ๋๋ค.
์์ ๋ด์ ๋ฌธ์๋ ํ
์คํธ(text)๋
ธ๋
๊ฐ ๋๋ค. ์ ๊ทธ๋ฆผ์์ #text
๋ก ํ์ธํ ์ ์๋ฏ์ด, ํ
์คํธ ๋
ธ๋๋ ๋ฌธ์์ด
๋ง ๋ด๋๋ค. ๋ํ, ์์ ๋
ธ๋๋ฅผ ๊ฐ์ง ์ ์๊ณ , ํธ๋ฆฌ์ ๋์์ ์ ๋
ธ๋(leaf node)
๊ฐ ๋๋ค.
ํ
์คํธ ๋
ธ๋์ ์๋ ํน์ ๋ฌธ์
๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
์ ์ค(newline) : โต
(์๋ฐ์คํฌ๋ฆฝํธ์์ \n๋ก ํ์)
๊ณต๋ฐฑ(space) : โฃ
์ ์ค๊ณผ ๊ณต๋ฐฑ์ ๊ธ์๋ ์ซ์์ฒ๋ผ ์ ํจํ ๋ฌธ์๋ก ์ทจ๊ธ๋๋ค. ๋ฐ๋ผ์ ์ด ๋ ํน์๋ฌธ์๋ ํ
์คํธ ๋
ธ๋๊ฐ ๋๊ณ , DOM์ ์ผ๋ถ๊ฐ ๋๋ค.
< head >
< title > ์ฌ์ด์ ๊ดํ์ฌ</ title >
</ head >
์ HTML ๋ฌธ์์์ <head>
์ <title>
์ฌ์ด์ ์ ์ค๊ณผ ์ฝ๊ฐ์ ๊ณต๋ฐฑ์ด ์๋ ๊ฑธ ๋ณผ ์ ์๋๋ฐ, ์ด๋ฐ ํน์๋ฌธ์ ์ญ์ #text
๋
ธ๋๊ฐ ๋๋ค.
์ญ์ฌ์ผ๋ก, <head>
ํ๊ทธ ์ด์ ์ ๊ณต๋ฐฑ๊ณผ ์ ์ค์ ๋ฌด์๋๋ค.
HTML ๋ช
์ธ์์์ ๋ชจ๋ ์ฝํ
์ธ ๋ body
์์ชฝ์ ์์ด์ผ ํ๋ค๊ณ ํ์ผ๋ฏ๋ก, </body>
๋ค์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฃ๋๋ผ๋ ๊ทธ ์ฝํ
์ธ ๋ ์๋์ผ๋ก body ์์ชฝ์ผ๋ก ์ฎ๊ฒจ์ง๋ค. ๋ฐ๋ผ์ </body>
๋ค์๋ ๊ณต๋ฐฑ์ด ์์ ์ ์๋ค.
๊ณต๋ฐฑ์ด ์๋ ํ
์คํธ ๋
ธ๋๋ง์ผ๋ก HTML๋ฌธ์๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ์๋ ์์ ์ฒ๋ผ ๋ง๋ค์ด์ผ ํ๋ค.
๊ธฐํ์ ์ธ HTML์ ๋ง๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ DOM ์์ฑ ๊ณผ์ ์์ HTML์ ์๋์ผ๋ก ๊ต์ ํ๋ค.
์๋ฅผ ๋ค์ด ๊ฐ์ฅ ์ต์์ ํ๊ทธ๋ ํญ์ <html>
์ด์ด์ผ ํ๋๋ฐ ๋ฌธ์์ <html>
ํ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ฌธ์ ์ต์์์ ์ด๋ฅผ ์๋์ผ๋ก ๋ฃ์ด์ค๋ค. ๋ฐ๋ผ์ DOM์๋ <html>
์ ๋์ํ๋ ๋
ธ๋๊ฐ ํญ์์๋ค. <body>
๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ฉ๋๋ค.
<!DOCTYPE html> ์๋
ํ์ธ์
์ ์์ ์ฒ๋ผ HTML ํ์ผ์ ์๋
ํ์ธ์
๋ผ๋ ๋ฌธ์ฅ ํ๋๋ง ์ ์ฅ๋ ์ํฉ์ด๋ผ๋, ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก <html>
๊ณผ <body>
๋ก ๊ฐ์ธ์ค๋ค. ๋ํ, <head>
๋ ๋ํด์ค๋ค.
DOM ์์ฑ๊ณผ์ ์์ ๋ธ๋ผ์ฐ์ ๋ ๋ฌธ์์ ์๋ ์๋ฌ ๋ฑ, ๋ซ๋ ํ๊ทธ๊ฐ ์๋ ์๋ฌ ๋ฑ์ ์๋์ผ๋ก ์ฒ๋ฆฌ
ํ๋ค.
์๋ ์์ ์ฒ๋ผ ์ ์์ ์ธ HTML ํ์์ด ์๋๊ณ , ํ๊ทธ ์ง์ด ์๋ง์๋ ๋ธ๋ผ์ฐ์ ๋ ์ ์์ ์ผ๋ก ๊ต์
์์ผ์ค๋ค.
์ถ๊ฐ์ ์ผ๋ก, ํ
์ด๋ธ์๋ ์ธ์ ๋ <tbody>
๊ฐ ์๋ค.
DOM ๋ช
์ธ์์์ ํ
์ด๋ธ์๋ ๋ฐ๋์ <tbody>
๊ฐ ์์ด์ผ ํ๋ค๊ณ ๋ชป ๋ฐ์ ๋จ์ง๋ง, HTML์์ <tbody>
๋ฅผ ์๋ตํ๊ณค ํ๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ๋ ์๋์ ๊ฐ์ด ์๋์ผ๋ก DOM์ <tbody>
๋ฅผ ๋ง๋ค์ด์ค๋ค.
์์ ๋
ธ๋์ ํ
์คํธ ๋
ธ๋ ์ธ์๋ ๋ค์ํ ๋
ธ๋ ํ์
์ด ์๋ค. ์๋ฅผ ๋ค์ด, ์ฃผ์๋ ๋
ธ๋๊ฐ ๋๋ค.
<!DOCTYPE html>
< html >
< head >
< title > ์ฌ์ด์ ๊ดํ์ฌ</ title >
</ head >
< body >
์ฌ์ด์ ๊ดํ ์ง์ค.
< ol >
< li > ์ฌ์ด์ ๋๋ํฉ๋๋ค.</ li >
<!-- comment -->
< li > ๊ทธ๋ฆฌ๊ณ ์๊พ๋ฅผ ์ ๋ถ๋ฆฌ์ฃ !</ li >
</ ol >
</ body >
</ html >
์ ์์ ์ฒ๋ผ ์์ฑ๋ HTML ๋ฌธ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด DOM ํธ๋ฆฌ๊ฐ ๊ตฌ์ฑ๋ ๊ฒ์ด๋ค.
ํธ๋ฆฌ์ ์ฃผ์ ๋
ธ๋(comment node)
๋ผ๋ ์๋ก์ด ๋
ธ๋ ํ์
์ด ๋ฑ์ฅํ๋ค. ํ์ฌ#comment
๋ก ํํ๋๋ ์ฃผ์ ๋
ธ๋๋ ๋ ํ
์คํธ ๋
ธ๋ ์ฌ์ด์ ์กด์ฌํ๋ค.
์ฌ๊ธฐ์, ์ฃผ์์ ํ๋ฉด ์ถ๋ ฅ๋ฌผ์ ์ํฅ์ ์ฃผ์ง ์๋๋ฐ, ์ DOM์ ์ถ๊ฐ๋๋์ง ์์ํดํ ์ ์๋ค. ์ฃผ์ ๋
ธ๋๋ HTML์ ์๋ค๋ฉด ๋ฐ๋์ DOM ํธ๋ฆฌ์ ์ถ๊ฐ๋์ด์ผ ํ๋ค๋ ๊ท์น๋๋ฌธ์ DOM์ ์ถ๊ฐ ๋ ๊ฒ์ด๋ค.
์๋ ๋ฌธ๊ตฌ๋ฅผ ๊ธฐ์ตํ์.
HTML ์์ ๋ชจ๋ ๊ฒ์ (์ฌ์ง์ด ์ฃผ์์ด๋๋ผ๋) DOM์ ๊ตฌ์ฑํ๋ค.
HTML ๋ฌธ์ ์ต์๋จ์ ์๋ <!DOCTYPE>
์ง์์ ๋ํ DOM ๋
ธ๋๊ฐ ๋๋ค. ์ด ๋
ธ๋๋ DOM ํธ๋ฆฌ์ <html>
๋ฐ๋ก ์์ ์์นํ๋ค. (์ง๊ธ๊น์ง ์์ ๋ค์๋ ํ์๋์ง๋ ์์์ง๋ง ์ค์ ๋ก๋ ์กด์ฌํ๋ ๋
ธ๋์ด๋ค)
๋ฌธ์ ์ ์ฒด๋ฅผ ๋ํ๋ด๋ document
๊ฐ์ฒด ๋ํ DOM ๋
ธ๋์ด๋ค.
์ฐธ๊ณ ๋ก ๋
ธ๋ ํ์
์ ์ด 12๊ฐ์ง
์ธ๋ฐ, ์ค๋ฌด์์ ์ฃผ๋ก 4๊ฐ์ง
๋
ธ๋๋ฅผ ๋ค๋ฃฌ๋ค.
์ค๋ฌด์์ ์์ฃผ ์ฌ์ฉํ๋ 4๊ฐ์ง ๋
ธ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
DOM์ ์ง์
์ ์ด ๋๋ ๋ฌธ์(document)
๋
ธ๋
HTML ํ๊ทธ์์ ๋ง๋ค์ด์ง๋ฉฐ, DOM ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ธ๋ก์ธ ์์ ๋
ธ๋(element node)
ํ
์คํธ๋ฅผ ํฌํจํ๋ ํ
์คํธ ๋
ธ๋(text node)
ํ๋ฉด์ ๋ณด์ด์ง๋ ์์ง๋ง, ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์ด ์ ๋ณด๋ฅผ DOM์ผ๋ก๋ถํฐ ์ฝ์ ์ ์๋ ์ฃผ์(comment) ๋
ธ๋