query selector all โ ์ธ์๋ก ์ ๋ฌํ css ์ ํ์๋ฅผ ๋ง์กฑ์ํค๋ ๋ชจ๋ ์์ ๋ ธ๋๋ฅผ ํ์ํ์ฌ ๋ฐํ. ์ฌ๋ฌ๊ฐ์ ์์ ๋ ธ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ dom ์ปฌ๋ ์ ๊ฐ์ฒด์ธ nodelist๋ฅผ ๋ฐํํ๋ค. ์ด๋ ์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด์ด๋ฉด์ ์ดํฐ๋ฌ๋ธ์ด๋ค.
htmlcollection VS nodelist : htmlcollection์ live nodelist, nodelist๋ static ํํ์ node list๋ฅผ ๋ฐํํ๋ค. getElementsByTagName method ๋ htmlcollection์, querySelectorAll์ static node list๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์, live nodelist ๋ ์ํ์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
example
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Yandex</title>
</head>
<body>
<a href="((http://yandex.ru))">ะฏะฝะดะตะบั</a>,
<a href="((http://yandex.com))">Yandex</a>
</body>
<script>
var elems1 = document.getElementsByTagName('a'), // return 2 lements, elems1.length = 2
elems2 = document.querySelectorAll("a"); // return 2 elements, elems2.length = 2
document.body.appendChild(document.createElement("a"));
console.log(elems1.length, elems2.length); // now elems1.length = 3!
// while elems2.length = 2
</script>
</html>
createtextnode โ ํ ์คํธ๋ ธ๋๋ ์์๋ ธ๋์ ์์๋ ธ๋์ด์ง๋ง, ์ด๋ฅผ ํตํด ์์ฑํ ํ ์คํธ๋ ธ๋๋ ์์ ๋ ธ๋์ ์์๋ ธ๋๋ก ์ถ๊ฐ๋์ง ์๊ณ ํ๋ก ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ์ดํ์ ์๋ ํ ์คํธ ๋ ธ๋๋ฅผ ์์ ๋ ธ๋์ ์ถ๊ฐํ๋ ๋ณ๋ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค. ex. appendChild..
์์ ๋ ธ๋์ ์์๋ ธ๋๊ฐ ํ๋๋ ์๋ ๊ฒฝ์ฐ์๋ ํ ์คํธ ๋ ธ๋๋ฅผ ์์ฑํ์ฌ ์์ ๋ ธ๋์ ์์๋ ธ๋๋ก ํ ์คํธ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ ๋ณด๋ค textContext ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ํจ์ฌ ๊ฐํธํ๋ค. ๋จ, ์์ ๋ ธ๋์ ์์๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ์์ ๋ ธ๋๊ฐ ์ ๊ฑฐ๋๊ณ ํ ๋น๋ ๋ฌธ์์ด์ด ํ ์คํธ๋ก ์ถ๊ฐ๋๋ฏ๋ก ์ฃผ์ํด์ผํ๋ค.
HTML Collection ๊ฐ์ฒด๋ ์ค์๊ฐ์ผ๋ก ๋ ธ๋ ๊ฐ์ฒด์ ์ํ ๋ณ๊ฒฝ์ ๋ฐ์ํ์ฌ ์์๋ฅผ ์ ๊ฑฐํ ์ ์๊ธฐ ๋๋ฌธ์ for๋ฌธ์ ์ํํ์ฌ ๋ ธ๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ฃผ์ํด์ผ ํ๋ค.
htmlCollection์ ์ ์ฌ๋ฐฐ์ด๋กlive nodelist ํํ์ด๊ธฐ ๋๋ฌธ์, ๋ ธ๋๊ฐ์ฒด๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์์ฑํ ๋, index์ ๊ฐ์ด ๊ณ์ ๋ณํ๊ธฐ ๋๋ฌธ์ for๋ฌธ์ ๋๋ฆด ๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด ๋ฌธ์ ๋ฅผ ํํผํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ 1. for๋ฌธ์ ์ญ์์ผ๋ก ์ํํ์ฌ ๋ ธ๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค. 2. while๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ ธ๋ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ฐ๋๋๊น์ง ๋ฐ๋ณตํ๋ค. 3. ์ ์ฌ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํ ๋ค, ๋ฐฐ์ด์ด ๊ฐ์ง ๊ณ ์ฐจํจ์์ธ forEach ๋ฉ์๋๋ฅผ ํตํด ๋ ธ๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค. ๋ฑ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
XSS(Cross Stie Scripting) ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค.
XSS ๊ณต๊ฒฉ์ ๊ด๋ฆฌ์์ ๊ถํ์ด ์๋ hacker๊ฐ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ๋ํ ๊ฒ์ฆ๊ณผ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ๊ทธ๋๋ก ์ถ๋ ฅํ๋ ๋์์ ์นจํฌํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ , ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ์ด๋ค. ๋๋ถ๋ถ ์ฌ์ฉ์๊ฐ ๊ธ์ ์ฐ๊ณ ์ฝ์ ์ ์๋ ๊ฒ์ํ์์ ๋ง์ด ๋ฐ์ํ๋ค.
์ด๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด์๋ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ์ ์ ์ฌ์ ์ํ์ ์ ๊ฑฐํ๋ HTML sanitization ๊ณผ์ ์ด ํ์ํ๋ค. ์ง์ ๊ตฌํํ ์๋ ์์ง๋ง ์์ ์ ์ผ๋ก ๋ฐฐํฌ๋์ด ์ฌ์ฉ์ค์ธ DOMPurify๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
XSS๋ฅผ ๋ง์์ฃผ๋ Anti XSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด๋ ์์ฝ๊ฒ XSS๋ฅผ ๋ฐฉ์ดํ ์ ์๋ค. XSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฒ ๋จ์์ ๊ฐ๋ฐ์๊ฐ ์ถ๊ฐํ๋ ๊ฒ์ด๊ณ , ์ฌ์ฉ์๋ค์ด ๊ฐ์ ๋ณธ์ธ์ ๋ธ๋ผ์ฐ์ ์์ ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ง ์๋๋ก ๋ฐฉ์ดํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ฆ , ๋ณด์ ๊ฐํ๋ฅผ ์ํด ํ/๋ฐฑ ๋ชจ๋์์ ์๋ฐฉํ ์ ์๋ค.
insertAdjacent์ innerHTML ๋ฉ์๋ ๋ ๋ค DOM ์กฐ์์ ์ฌ์ฉ๋๋ ๋ฉ์๋์ด๋ค. ๋ ๋ฉ์๋๋ textContent(innerText)์ ๋ค๋ฅด๊ฒ ์์ ๋ ธ๋์ ๋ชจ๋ ์์ ๋ ธ๋๊ฐ ์ ๊ฑฐ๋๊ณ ํ ๋นํ ๋ฌธ์์ด์ ํฌํจ๋์ด ์๋ HTML ๋งํฌ์ ์ด ํ์ฑ๋์ด ์์ ๋ ธ๋์ ์์ ๋ ธ๋๋ก DOM์ ๋ฐ์๋๋ค๋ ๊ณตํต์ ์ด ์๋ค. ๋ฐ๋ฉด textContent๋ HTML ๋งํฌ์ ์ด ํ์ฑ๋์ง ์๊ณ text ํํ๋ก ๋ฐ์๋๋ค.
์ฐจ์ด๋ ๊ธฐ์กด์ ์์ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ์์ ๋ ธ๋๋ฅผ ์์ฑํ๊ณ ์ฝ์ ํ ๋ innerHTML์ ์์น๋ฅผ ์ง์ ํ ์ ์์ด ๊ธฐ์กด ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ค๊ฐ ์๋ก์ด ๋ ธ๋์ ๊ฐ์ด ์ฝ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ผ๋ก ์ข์ง ์์ง๋ง(reflow, repaint๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์) insetAdjacent๋ ๊ธฐ์กด์ ์์ ๋ ธ๋๋ ์ญ์ ํ์ง ์์ผ๋ฉด์ ์๋ก ์์ฑํ ๋ ธ๋๋ฅผ ์์น๋ฅผ ์ง์ ํด์ ์ฝ์ ํ ์ ์๋ค๋ ์ ์ด๋ค. ์ฆ ๋ ํจ์จ์ ์ด๋ค.