September 18, 2020
๋ฌ๊ธ์์ด ํ ์คํธ๋ ธ๋์๋ ์ด๋ฒคํธํธ๋ค๋ฌ๋ฅผ ์ถ๊ฐํ ์ ์์๊น? ๋ผ๋ ๋ง์ฐํ ๊ถ๊ธ์ฆ์ด ์๊ฒผ๋ค.
Node๋ EventTarget์ ์์๋ฐ์์ ์ด๋ฒคํธ๊ฐ ์ ์๋ํ ์ค ์์์ง๋ง ํด๋ฆญ ์ด๋ฒคํธํธ๋ค๋ฌ๋ ์๋ํ์ง ์์๊ณ , ์ฌ๋ฌ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๊ณ ์ง์ ์คํ์ ํ๋ฉด์ ๋ฐฐ์ด ๋ด์ฉ๋ค์ ์ ๋ฆฌํด๋ณด๊ธฐ๋ก ํ๋ค.
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ HTML๋ฌธ์๋ฅผ ํ์ฑํด์ ์๋ฏธ์๋ ํ ํฐ์ผ๋ก ๋๋๊ณ ์ด๋ฌํ ํ ํฐ๋ค์ ๊ฐ์ฒดํํ๋ก ์ถ์ํํด์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค. ์ด๋ฅผ DOM Tree๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด๋ฌํ DOM Tree์ ๊ฐ์ฒด ํ๋ํ๋๋ฅผ ๋ ธ๋๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, DOM Tree์์ฒด๋ ํ๋์ ํฐ ๋ ธ๋์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ธ๋์ ์ข ๋ฅ๋ ๋ํ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ๋ค.
๊ทธ์ธ์ ProcessingInstruction ๋ ธ๋๋ ์๋ค๊ณ ํ๋๋ฐ ์ ์ฌ์ฉํ ๊ฒ ๊ฐ์ง ์์์ ํจ์ฐ!
๊ทธ๋ฆฌ๊ณ Node๋ค์ ๋ชจ๋ eventTarget์ ์์๋ฐ๋๋ค.
์ด๋ฌํ ์์๊ด๊ณ๋ฅผ ํตํด ํ ์คํธ๋ ธ๋๋ eventTarget์ ์์๋ฐ์ผ๋๊น ์ด๋ฒคํธํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ ์ ์๊ฒ ๊ฑฐ๋ ์๊ฐํ๊ฒ ๋์๋ค.
์ค์ ํ ์คํธ ๋ ธ๋๋ฅผ ๋ง๋ค๊ณ ๋ ๋๋ง ํด์ฃผ์๋ค.
๊ทธ๋ค์ childNodes๋ฅผ ์ด์ฉํด์ node๋ฅผ ์ฐธ์กฐํ ๋ค, click ์ด๋ฒคํธํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํด์ฃผ์๋ค.
๋ถ๋ช Nodeํ์ ์ด๊ธฐ ๋๋ฌธ์ addEventListenr๊ฐ ์๋์์ฑ์ผ๋ก ์ฝ์์์ ์ถ์ฒํด์ฃผ์์ง๋ง ์ด๋ฒคํธ๋ ๋ฐ์ํ์ง ์์๋ค.
ํ ์คํธ๋ ธ๋๋ ์๋ ์ด๋ฒคํธํธ๋ค๋ฌ๊ฐ ๋ฑ๋ก์ด ์๋๋์ง ๊ถ๊ธํ๊ณ ๊ตฌ๊ธ๋ง์ ํตํด ํ ์คํธ๋ ธ๋์์๋ ๋๋ถ๋ถ์ ์ด๋ฒคํธ๋ ๋ฐ์ํ์ง ์๊ณ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ ์กด์ฌํ๋ค ๋ผ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์์๋ค.
ํด๋ฆญ ์ด๋ฒคํธ๋ ์๋ํ์ง ์์ง๋ง, DOMCharacterDataModified
์ด๋ฒคํธ๋ ์๋ํ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๊ทผ๋ฐ ์๋ฆฌ๋จผํธ ๋
ธ๋(div)์๋ ๋ฐ๋๋ก DOMCharacterDataModified
๊ฐ ์๋ํ์ง ์์๋ค.
ํ์ง๋ง, DOMNodeInserted
์ด๋ฒคํธ๋ฅผ ์ผ์ ๋๋ ์ ์๋ํ๋ค.
์ฆ, DOMCharacterDataModified
๋ ํ
์คํธ๋
ธ๋์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ผ๋ ๊ฒ์ ์ ์ ์์๋ค.
๊ทธ๋ฆฌ๊ณ DOMNodeInserted
์ด๋ฒคํธ๊ฐ ์๋ํ๋ ๊ฒ์ ๋ณด๊ณ Node.textContent
๋ ๋
ธ๋ ๋ด๋ถ์ ํ
์คํธ๋ฅผ ์ง์ ๋ณํ์ํค๋ ๊ฒ ์๋๋ผ, ๋
ธ๋์ child Node์ธ ํ
์คํธ๋
ธ๋ ์ฐธ์กฐํ๊ณ ๋ณํ์ํค๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์๋ค.
ํ ์คํธ๋ ธ๋๋ EventTarget์ ์ด๋ฒคํธํธ๋ค๋ฌ ์ถ๊ฐ ๋ฉ์๋๋ฅผ ์์๋ฐ๊ธฐ๋ ํ์ง๋ง, click, change ๋ฑ์ ์ด๋ฒคํธ๋ ๋ฐ์ํ์ง ์๊ณ , DOM์ ๋ณํ๋ฅผ ๊ฐ์งํ๋ ์ด๋ฒคํธ๋ง ๋ฐ์ํ๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
์ฆ, EventTarget์ ๋ฉ์๋๋ฅผ ์์๋ฐ์ง๋ง, ์๋ฆฌ๋จผํธ์ ํ ์คํธ๋ ธ๋๊ฐ ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ์ข ๋ฅ๋ ๋ฌ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ click ์ด๋ฒคํธ์ ๊ทผ์์ง๋ div
๊ฐ์ ์๋ฆฌ๋จผํธ์ด๋ค. ํ์ง๋ง, ํ
์คํธ๋
ธ๋ ๋ํ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ ์กด์ฌํ๊ธด ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฆฌ๋จผํธ ๋ ธ๋๊ฐ ํ ์คํธ๋ผ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ํํ๊ฐ ์๋๋ผ ์๋ฆฌ๋จผํธ ๋ ธ๋์ child๋ก ํ ์คํธ ๋ ธ๋๋ฅผ ๊ฐ๋๋ค๋ ๊ฒ๋ ์ถ๊ฐ๋ก ์ ์ ์์๋ค.
๋ํ DOMCharacterDataModified
, DOMNodeInserted
๊ฐ์ ์ด๋ฒคํธ๋ DOM ๋ณํ๊ฐ์ง ์ด๋ฒคํธ๋ ์ค๊ณ๊ฒฐํจ, ์ฑ๋ฅ๋ฌธ์ ์ ํฌ๋ก์ฑ๋ธ๋ผ์ฐ์ง ๋ฑ๋ฑ์ ์ด์๋ก Mutation Oberver API๋ฅผ ๊ถ์ฅํ๋ค๋ ์๋ก์ด ์ฌ์ค๋ ์ ์ ์์๋ค.
๋ฐ์ HTML์ ๋ณด๊ณ ๊น์ด๊ฐ 3, ๋๋น๊ฐ 2์ธ ํธ๋ฆฌ๊ฐ ๋ ์ค๋ฅด๋ฉด ์ ์ดํดํ๋ฏ..!
<div>๋๋ํ ์คํธ๋ ธ๋<span>์คํฌํ๊ทธ๋ด์ํ ์คํธ</span></div>
Node์ Element ๋ณ๋ก DOM์ ์ฐธ์กฐํ๋ ๋ฉ์๋๋ ๊ฐ๊ฐ ๋ค์ํด์ ์ ์ฌ์ ์์ ์ฌ์ฉํ๋ ๊ฒ ์ค์ํ ๊ฒ ๊ฐ๋ค. Node ๋ฉ์๋๋ ๋ณดํต ํ ์คํธ๋ ธ๋๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ ๊ฐ๋ค.
Element.children
vs Node.childNodes
HTML ํ์ฑ์, ๊ณต๋ฐฑ๋ ์๋๋ ํ ์คํธ๋ ธ๋์ ๋ค ํฌํจ๋๋ค.
before after