์ฑ <๋ฌ๋์๋ฐ์คํฌ๋ฆฝํธ>๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋ฐฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ๋๋ค.
๋ชฉ์ฐจ
- <DOM ์์ ์ ๊ทผ, ํ์, ์กฐ์>
- 1. DOM ์์์ ์ ๊ทผ
- 1-1) get๋ฉ์๋๋ฅผ ์ด์ฉ
1-2) DOM์์ ์ฟผ๋ฆฌ
1-3) DOM Traversing(ํ์) - 2. DOM ์์ ์กฐ์
- 2-1) ํ
์คํธ ๋
ธ๋์์ ์ ๊ทผ/์์
2-2) ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋์์ ์ ๊ทผ/์์
2-3) HTML ์ฝํ ์ธ ์กฐ์(Manipulation)
2-4) DOM์ ์ง์ ์กฐ์
โป innerHTML vs. DOM ์กฐ์ ๋ฐฉ์
<DOM ์์ ์ ๊ทผ, ์กฐ์>
DOM์ ํตํด ์นํ์ด์ง๋ฅผ ์กฐ์(manipulate)ํ๊ธฐ ์ํด์๋ ํ์๊ณผ ์กฐ์ ๊ณผ์ ์ด ํ์ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๊ฒ์ ํ์ํ ์๋จ(API)์ ์ ๊ณตํ๋ค.
- ์กฐ์ํ๊ณ ์ํ๋ ์์๋ฅผ ์ ํ ๋๋ ํ์
- ์ ํ๋ ์์์ ์ฝํ ์ธ ๋๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์กฐ์
1. DOM ์์์ ์ ๊ทผ
DOM์์๋ฅผ ํ์์๋ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ ์ธ๊ฐ์ง๊ฐ ์๋ค.
1-1) get๋ฉ์๋๋ฅผ ์ด์ฉ
document.getElementById() |
ID๋ฅผ ์ด์ฉํด ์์๋ฅผ ํ์ |
document.getElementsByClassName() |
์ฃผ์ด์ง ํด๋์ค ์ด๋ฆ์ ํด๋น๋๋ ์์๋ฅผ ๋ฐํ |
document.getElementsByTagName() |
์ฃผ์ด์ง ํ๊ทธ ์ด๋ฆ์ ํด๋น๋๋ ์์๋ฅผ ๋ฐํ |
1-2) DOM์์ ์ฟผ๋ฆฌ
document.querySelector() |
CSS์ ํ์๋ฅผ ์ฌ์ฉํด ์์๋ฅผ ์ฐพ์. ์ ํ์์ ํด๋นํ๋ ์ฒซ๋ฒ์งธ ์์๋ง ํ์ํจ. |
document.querySelectorAll() |
CSS์ ํ์๋ฅผ ์ฌ์ฉํด ์์๋ฅผ ์ฐพ์. ์ ํ์์ ํด๋นํ๋ ๋ชจ๋ ์์๋ฅผ ๋ฐฐ์ด๋ก ๊ฐ์ ธ์ด. |
1-3) DOM Traversing(ํ์)
์์ ๋ ธ๋ ํ์ |
hasChildNodes() |
์์ ๋ ธ๋๊ฐ ์๋์ง ํ์ธํ๊ณ Boolean ๊ฐ์ ๋ฐํํ๋ค. |
Children |
์์ ๋
ธ๋๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ ์ ์ฌ ๋ฐฐ์ด์ ํํ๋ก ๋ฐํ. |
|
firstElementChild, lastElementChild |
์ฒซ๋ฒ์จฐ/ ๋ง์ง๋ง ์์ ๋ ธ๋๋ฅผ ํ์. |
|
childNodes |
์์ ๋ ธ๋์ ์ปฌ๋ ์ ์ ๋ฐํ. ํด๋น ์์ ํ์์ ์กด์ฌํ๋ ๋ชจ๋ text node์ comment node๋ฅผ ํฌํจํ์ฌ ๋ฐํ. ํ๊ทธ ์ฌ์ด์ ๊ณต๋ฐฑ์ด๋ ๋์ด์ฐ๊ธฐ๋ text node๋ก ์ธ์งํ์ฌ ๋ฐํ. |
|
ํ์ ๋ ธ๋ ํ์ |
previousSibling, nextSibling |
ํ์ ๋ ธ๋๋ฅผ ํ์. text node๋ฅผ ํฌํจํ ๋ชจ๋ ํ์ ๋ ธ๋๋ฅผ ํ์ํ๋ค. |
previousElementSibling, nextElementSibling |
ํ์ ๋ ธ๋๋ฅผ ํ์. ํ์ ๋ ธ๋ ์ค์์ Element type ์์๋ง์ ํ์ํ๋ค. |
|
๋ถ๋ชจ ๋ ธ๋ ํ์ |
parentNode |
ํด๋น ์์์ ๋ถ๋ชจ ์์์ ์ ๊ทผ. parentNode๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ์ฌ ์์๋ก ๊ณ์ ๊ฑฐ์ฌ๋ฌ์ฌ๋ผ๊ฐ ์ ์๋ค. ์ต์ข ์ ์ผ๋ก document node๊น์ง ํ๊ณ ์ฌ๋ผ๊ฐ๊ณ ๊ทธ ์ด์์ null๊ฐ์ด ์ถ๋ ฅ๋๋ค. |
parentElement |
ํด๋น ์์์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ํ์. parentNode์ ๋๊ฐ์ ์ญํ ์ ํ์ง๋ง element ์์๋ง ํ์ํ๋ฏ๋ก ๊น์ง ๊ฑฐ์ฌ๋ฌ์ฌ๋ผ๊ฐ ์ดํ์ ๊ทธ ์์ ์์์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด null๊ฐ์ ์ถ๋ ฅํ๋ค. |
2. DOM ์์ ์กฐ์
- ํ ์คํธ๋ฅผ ์ถ๊ฐ ๋๋ ๋ณ๊ฒฝ์์๋ textContent, ์๋ก์ด ์์์ ์ถ๊ฐ ๋๋ ์ญ์ ์์๋ DOM ์กฐ์ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ก ํ๋ค.
- innerHTML์ ํฌ๋ก์ค ์คํฌ๋ฆฝํ ๊ณต๊ฒฉ(XSS)์ ์ทจ์ฝํ๋ค. ๋ฐ๋ผ์ untrusted data์ ๊ฒฝ์ฐ, ์ฃผ์ํ์ฌ์ผ ํ๋ค.
2-1) ํ ์คํธ ๋ ธ๋์์ ์ ๊ทผ/์์ - ๋ชจ๋ ์์์ ์กด์ฌํ๋ nodeName, nodeType์ ํตํด ๋ ธ๋์ ์ ๋ณด๋ฅผ ์ทจ๋ํ ์ ์๋ค.
- ํด๋น ํ
์คํธ ๋
ธ๋์ ๋ถ๋ชจ ๋
ธ๋๋ฅผ ์ ํํ๋ค. ํ
์คํธ ๋
ธ๋๋ ์์ ๋
ธ๋์ ์์์ด๋ค.
- firstChild ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธ ๋
ธ๋๋ฅผ ํ์ํ๋ค.
- ํ
์คํธ ๋
ธ๋์ ์ ์ผํ ํ๋กํผํฐ(nodeValue)๋ฅผ ์ด์ฉํ์ฌ ํ
์คํธ๋ฅผ ์ทจ๋ํ๋ค.
- nodeValue๋ฅผ ์ด์ฉํ์ฌ ํ ์คํธ๋ฅผ ์์ ํ๋ค.
์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋์์ ์ ๊ทผ/์์
className |
class ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ ์ทจ๋ ๋๋ ๋ณ๊ฒฝ. className ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ ๊ฒฝ์ฐ, class ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด class ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์์ฑํ๊ณ ์ง์ ๋ ๊ฐ์ ์ค์ ํ๋ค. class ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ, ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด์ด ๋ฐํ๋๋ฏ๋ก String ๋ฉ์๋ split(' ')๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ๋ค. |
classList | add, remove, item, toggle, contains, replace ๋ฉ์๋๋ฅผ ์ ๊ณต. |
id |
id ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ ์ทจ๋ ๋๋ ๋ณ๊ฒฝ. id ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ ๊ฒฝ์ฐ, id ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด id ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์์ฑํ๊ณ ์ง์ ๋ ๊ฐ์ ์ค์ ํ๋ค. |
hasAttribute(attribute) | ์ง์ ํ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ๊ฒ์ฌ. |
getAttribute(attribute) | ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ ์ทจ๋. |
setAttribute(attribute, value) | ์ดํธ๋ฆฌ๋ทฐํธ์ ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ ์ค์ . |
removeAttribute(attribute) | ์ง์ ํ ์ดํธ๋ฆฌ๋ทฐํธ ์ ๊ฑฐ. |
2-3) HTML ์ฝํ ์ธ ์กฐ์(Manipulation) - ๋ชจ๋ ์์์ ์กด์ฌํ๋ textContent, innerHTML์ ํตํด ์ฝ๋ด์ธ ์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ ์ ์์ง๋ง, ๋ ํ๋กํผํฐ๋ฅผ ์์ ํ๋ ๊ฒ์ ํ๊ดด์ ์ธ ์์ ์ด๋ฏ๋ก ์ฃผ์ํ๋ค.
textContent |
์์์ ํ ์คํธ ์ฝํ ์ธ ์ทจ๋ ๋๋ ๋ณ๊ฒฝ. ์ด๋ ๋งํฌ์ ์ ๋ฌด์๋จ. ์๋ก์ด ํ ์คํธ๋ฅผ ํ ๋นํ๋ฉด ํ ์คํธ ๋ณ๊ฒฝ ๊ฐ๋ฅ. ์ด๋ ์์ํ ํ ์คํธ๋ง ์ง์ ํด์ผ ํ๋ฉฐ ๋งํฌ์ ์ ํฌํจ์ํค๋ฉด ๋ฌธ์์ด๋ก ์ธ์๋์ด ๊ทธ๋๋ก ์ถ๋ ฅ๋๋ค. (XSS์ ์ทจ์ฝํ๋ค.) |
innerText |
์์์ ํ ์คํธ ์ฝํ ์ธ ์๋ง ์ ๊ทผ. innerText์ ๋จ์ : |
innerHTML |
ํด๋น ์์์ ๋ชจ๋ ์์ ์์๋ฅผ ํฌํจํ๋ ๋ชจ๋ ์ฝํ ์ธ ๋ฅผ ํ๋์ ๋ฌธ์์ด๋ก ์ทจ๋. ์ด ๋ฌธ์์ด์ ๋งํฌ์ ์ ํฌํจํจ. |
2-4) DOM์ ์ง์ ์กฐ์ - ํ ๊ฐ์ ์์๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ์์ ๋ ธ๋ ์์ฑ createElement() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ์์ ๋ ธ๋๋ฅผ ์์ฑํ๋ค. createElement() ๋ฉ์๋์ ์ธ์๋ก ํ๊ทธ ์ด๋ฆ์ ์ ๋ฌํ๋ค.
- ํ ์คํธ ๋ ธ๋ ์์ฑ createTextNode() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ํ ์คํธ ๋ ธ๋๋ฅผ ์์ฑํ๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๋ต๋ ์ ์์ง๋ง ์๋ตํ๋ ๊ฒฝ์ฐ, ์ฝํ ์ธ ๊ฐ ๋น์ด ์๋ ์์๊ฐ ๋๋ค.
- ์์ฑ๋ ์์๋ฅผ DOM์ ์ถ๊ฐ appendChild() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๋ ธ๋๋ฅผ DOM tree์ ์ถ๊ฐํ๋ค. ๋๋ removeChild() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ DOM tree์์ ๋ ธ๋๋ฅผ ์ญ์ ํ ์๋ ์๋ค.
createElement(tagName) | ํ๊ทธ์ด๋ฆ์ ์ธ์๋ก ์ ๋ฌํ์ฌ ์์๋ฅผ ์์ฑํ๋ค. |
createTextNode(text) | ํ ์คํธ๋ฅผ ์ธ์๋ก ์ ๋ฌํ์ฌ ํ ์คํธ ๋ ธ๋๋ฅผ ์์ฑํ๋ค. |
appendChild(Node) | ์ธ์๋ก ์ ๋ฌํ ๋ ธ๋๋ฅผ ๋ง์ง๋ง ์์ ์์๋ก DOM ํธ๋ฆฌ์ ์ถ๊ฐํ๋ค. |
removeChild(Node) | ์ธ์๋ก ์ ๋ฌํ ๋ ธ๋๋ฅผ DOM ํธ๋ฆฌ์ ์ ๊ฑฐํ๋ค. |
โป innerHTML vs. DOM ์กฐ์ ๋ฐฉ์
- innerHTML
์ฅ์ | ๋จ์ |
DOM ์กฐ์ ๋ฐฉ์์ ๋นํด ๋น ๋ฅด๊ณ ๊ฐํธํ๋ค. | XSS๊ณต๊ฒฉ์ ์ทจ์ฝ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ก ๋ถํฐ ์ ๋ ฅ๋ฐ์ ์ฝํ ์ธ (untrusted data: ๋๊ธ, ์ฌ์ฉ์ ์ด๋ฆ ๋ฑ)๋ฅผ ์ถ๊ฐํ ๋ ์ฃผ์ํ์ฌ์ผ ํ๋ค. |
๊ฐํธํ๊ฒ ๋ฌธ์์ด๋ก ์ ์ํ ์ฌ๋ฌ ์์๋ฅผ DOM์ ์ถ๊ฐํ ์ ์๋ค. | ํด๋น ์์์ ๋ด์ฉ์ ๋ฎ์ด ์ด๋ค. ์ฆ, HTML์ ๋ค์ ํ์ฑํ๋ค. ์ด๊ฒ์ ๋นํจ์จ์ ์ด๋ค. |
์ฝํ ์ธ ๋ฅผ ์ทจ๋ํ ์ ์๋ค. |
- DOM ์กฐ์ ๋ฐฉ์
์ฅ์ | ๋จ์ |
ํน์ ๋ ธ๋ ํ ๊ฐ(๋ ธ๋, ํ ์คํธ, ๋ฐ์ดํฐ ๋ฑ)๋ฅผ DOM์ ์ถ๊ฐํ ๋ ์ ํฉํ๋ค. | innerHTML๋ณด๋ค ๋๋ฆฌ๊ณ ๋ ๋ง์ ์ฝ๋๊ฐ ํ์ํ๋ค. |
'๐ฐ ์ธ์ด > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Ajax (0) | 2020.01.25 |
---|---|
์ด๋ฒคํธ (0) | 2020.01.24 |
๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ(1) - ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ DOM (0) | 2020.01.24 |
์ ๊ท ํํ์ (0) | 2020.01.23 |
๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ(1) - ๋๊ธฐvs๋น๋๊ธฐ, ์ฝ๋ฐฑ (0) | 2020.01.14 |