๋ฆฌ์กํธ๋ง ํ๋ค๋ณด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ง์์ด ๋ชจ๋ ์ฆ๋ฐํด๋ฒ๋ฆฐ ๋๋....
๋ฉ์๋๋ช ๋ค์ ์ฃ๋ค ๊น๋จน์ด๋ฒ๋ฆฐ ๊ฒ ๊ฐ๋ค. ๊ธํ๊ฒ ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ณด๋ฉฐ ๊ธฐ์ตํด๋ด๋ณด๊ธฐ๋ก ํ๋ค.
DOM์ ์กฐ์ํ๊ธฐ ์ํ ๋ค์ํ ๋ฉ์๋ ์ค ์ด๋ค ๊ฒ์ ์ ํํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ๋์๋ค.
๋งค๋ฒ ๊น๋จน์ด์ ๋งค๋ฒ ๊ณ ๋ฏผํ๊ณ ๋งค๋ฒ ๊ฒ์ํ๊ณ !!! ์ง๊ฒจ์... ์ด๋ฒ์ ์ ๋ฆฌํด๋์ผ์ง.
ํ ์คํธ ์ฝํ ์ธ ๋ฅผ ๋ค๋ฃจ๊ธฐ: innerText,textContent
๐ innerText
- ์์์ ๋ ๋๋ง๋ ํ ์คํธ๋ง ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ์คํ์ผ์ด ์ ์ฉ๋ ํ์ ํ ์คํธ๋ง ๊ฐ์ ธ์จ๋ค.
- display: none์ด๋ visibility: hidden์ผ๋ก ์จ๊ฒจ์ง ์์์ ํ ์คํธ๋ textContent๋ก๋ ์ ๊ทผํ ์ ์์ง๋ง, innerText๋ ์จ๊ฒจ์ง ์์์ ํ ์คํธ๋ฅผ ๋ฌด์ํ๋ค.
- textContent๋ณด๋ค ๋ ๋๋ง ๊ฒฐ๊ณผ์ ์์กดํ๋ฏ๋ก ๋ณต์กํ ๊ตฌ์กฐ์์๋ ์กฐ๊ธ ๋ ๊น๋ค๋ก์ธ ์ ์๋ค.
- innerText๋ DOM์ ์คํ์ผ์ ๊ณ์ฐํ๋ฏ๋ก textContent๋ณด๋ค ์ฝ๊ฐ ๋๋ฆด ์ ์์ง๋ง, ์ผ๋ฐ์ ์ธ ์ํฉ์์๋ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
๐ textContent
- ์์์ ํ ์คํธ ๋ด์ฉ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ฐ์ ธ์จ๋ค. HTML ํ๊ทธ๋ ํ ์คํธ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ํ๊ทธ๊ฐ ๋ ๋๋ง๋์ง ์๋๋ค.
- ๋ฐ๋ผ์ ํ๊ทธ ์์ด ์์ํ ํ ์คํธ๋ง ๋ค๋ฃฐ ๋ ์ ํฉํ๋ค.
- ์ฑ๋ฅ ์ธก๋ฉด์์ ๋งค์ฐ ๋น ๋ฅด๋ฉฐ, DOM์ ๋ค์ ๋ ๋๋งํ์ง ์๊ณ ํ ์คํธ๋ง ์ ๋ฐ์ดํธ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ๊ฑฐ์ ์๋ค.
- ํ ์คํธ๋ง ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ HTML ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ ํ์๊ฐ ์์ด ์ ์ง ๋ณด์๊ฐ ์ฝ๋ค.
HTML ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ฝ์ : innerHTML, appendChild, insertAdjacentHTML
๐ innerHTML
- ์์ ๋ด๋ถ์ HTML์ด๋ XML ๋งํฌ์ ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํ๋ค.
- HTML ๋งํฌ์ ์ ํฌํจํ ๋ฌธ์์ด์ ์ฝ๊ฒ ์ฝ์ ํ ์ ์๋ค. ์๋๊ฐ ๋น ๋ฅด๋ค.
- ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ
(XSS) ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค.
- ๋ด์ฉ์ ๋ณ๊ฒฝํ์ง ์๊ณ ์ถ๊ฐ์ ์ผ๋ก HTML์ ์ฝ์
ํ๊ณ ์ ํ ๋๋ insertAdjacentHTML() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค.
..Why๐ง?
innerHTML์ ์์์ ๋ชจ๋ ๋ด์ฉ์ ๋ค์ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๊ณ , ๊ธฐ์กด์ ์์ ์์๊ฐ ์์๋ ์ ์๋ค. ๋ฐ๋ฉด, insertAdjacentHTML()์ ๊ธฐ์กด์ DOM ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์ ์๋ก์ด HTML์ ํจ์จ์ ์ผ๋ก ์ฝ์ ํ ์ ์์ด ์ฑ๋ฅ๊ณผ ์์ ์ฑ ๋ฉด์์ ์ ๋ฆฌํ๋ค.
- ๋ด์ฉ์ ๋ณ๊ฒฝํ์ง ์๊ณ ์ถ๊ฐ์ ์ผ๋ก HTML์ ์ฝ์
ํ๊ณ ์ ํ ๋๋ insertAdjacentHTML() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค.
๐ insertAdjacentHTML()
- element.insertAdjacentHTML(position, text)
- ๊ธฐ์กด ์์๋ฅผ ์ ์งํ ์ฑ๋ก ์ง์ ๋ ์์น(position)์ HTML ๋ฌธ์์ด์ ํ์ฑํ์ฌ ์์๋ก ์ฝ์ ํ๋ค.
- insertAdjacentHTML์ ์์๋ฅผ ๋ค์ ํ์ฑํ์ง ์์ผ๋ฏ๋ก ํด๋น ์์ ์์ ๊ธฐ์กด ์์ ์์๋ฅผ ์์์ํค์ง ์๋๋ค.
- HTML์ ํ ๋ฒ์ ์ถ๊ฐํ๋ฏ๋ก ์ฑ๋ฅ์ด ๋น ๋ฅผ ์ ์์ง๋ง ๋ณด์ ๋ฌธ์ (XSS: Cross-site scripting)๋ก ์ธํด ์ธ๋ถ ์ ๋ ฅ์ ์ฝ์ ํ ๋๋ ์ฃผ์ํด์ผ ํ๋ค.
const el = document.getElementById('el')
el.insertAdjacentHTML('beforebegin', '<span>Before Begin</span>');// el ์ด์ ์ ์ฝ์
el.insertAdjacentHTML('afterbegin', '<span>After Begin</span>'); // el์ ์ฒซ ๋ฒ์งธ ์์ ์ด์ ์ ์ฝ์
el.insertAdjacentHTML('beforeend', '<span>Before End</span>'); // el์ ๋ง์ง๋ง ์์ ์ดํ์ ์ฝ์
el.insertAdjacentHTML('afterend', '<span>After End</span>'); // el ์ดํ์ ์ฝ์
<span> --A-- </span>
<span>Before Begin</span>
<span id="el">
<span>After Begin</span>
<span> --B-- </span>
--C--
<span> --D-- </span>
<span>Before End</span>
</span>
<span>After End</span>
<span> --E-- </span>
๐ appendChild()
- ์๋ก ์์ฑ๋ ์์๋ฅผ ๊ธฐ์กด DOM์ ์์์ผ๋ก ์ถ๊ฐํ๋ค.
- ์ฝ๋๊ฐ ๋ช ํํ๊ณ ์ง๊ด์ ์ด๊ธฐ ๋๋ฌธ์ ์ ์ง ๋ณด์์ ๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋๋ค.
- ์ฌ๋ฌ ์์๋ฅผ ํ ๋ฒ์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ์ฝ๊ฐ์ ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ์ด ์ํธํ๋ค.
โจ ๊ฒฐ๋ก
innerText vs textContent
innerText๋ ๋ ๋๋ง๋ ํ ์คํธ๋ง ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ์คํ์ผ์ ์์กด์ ์ด๋ค. ๋ํ ์จ๊ฒจ์ง ์์์ ํ ์คํธ๋ ๋ฌด์๋๋ฏ๋ก, ์์ํ ํ ์คํธ ์ฒ๋ฆฌ์์๋ textContent๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋์ฑ ๋น ๋ฅด๊ณ ๋จ์ํ๋ค. DOM ๊ตฌ์กฐ๋ฅผ ๋ค์ ๋ ๋๋งํ์ง ์๊ณ ์์ ํ ์คํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ๊ฑฐ์ ์๋ค.
innerHTML vs insertAdjacentHTML vs appendChild
innerHTML์ ๊ธฐ์กด์ ๋ชจ๋ ๋ด์ฉ์ ๋ฎ์ด์ฐ๊ธฐ ๋๋ฌธ์, ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค. insertAdjacentHTML์ ๊ธฐ์กด ์์๋ฅผ ์ ์งํ๋ฉด์ ์๋ก์ด HTML์ ์ถ๊ฐํ๋ฏ๋ก ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค. (์์์์์ ํ์ฑ๊ณผ์ ์ด ์๋ต๋์ด ๋ ๋น ๋ฅด๊ณ ์ฑ๋ฅโฌ)
ํ์ง๋ง insertAdjacentHTML๊ณผ innerHTML์ XSS ๊ณต๊ฒฉ์ ์ทจ์ฝํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค๋ฉด appendChild๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์์ ํ๋ค๊ณ ํ๋จํ์๋ค. ์ฑ๋ฅ ๋ฉด์์๋ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์์๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐ๋๋ค.
๐ง ์ฐธ๊ณ
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText
https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent
https://developer.mozilla.org/ko/docs/Web/API/Element/innerHTML
https://developer.mozilla.org/ko/docs/Web/API/Element/insertAdjacentHTML
https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild
'๐ฉโ๐ป hello, world! > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DOM ๋ค๋ฃจ๊ธฐ : todolist layout ๋ฐ๋ณต๋๋ ์ฝ๋ ๋ฆฌํฉํ ๋ง (0) | 2024.09.23 |
---|---|
map / forEach ์ฐจ์ด (0) | 2024.09.11 |