DOM์์ ์์๋ฅผ ํด๋ฆญํ ๋ ์คํ๋๋ ์ด๋ฒคํธ๋ **์์ → ๋ถ๋ชจ๋ก ์ ํ(๋ฒ๋ธ๋ง)**๋ฉ๋๋ค.
์ด ํน์ฑ์ ์ด์ฉํด์, “์ฌ๋ฌ ์์ ์์๋ง๋ค ์ด๋ฒคํธ๋ฅผ ๋ถ์ด์ง ์๊ณ ๋ถ๋ชจ ํ๋์ ์ด๋ฒคํธ๋ฅผ ๋งก๊ธฐ๋ ๋ฐฉ์”์ **์ด๋ฒคํธ ์์(Event Delegation)**์ด๋ผ๊ณ ํฉ๋๋ค.
1. ๊ธฐ์กด ๋ฐฉ์: ์์๋ง๋ค ์ด๋ฒคํธ ์ง์ ๋ฑ๋ก
deleteBtn.addEventListener("click", function(){
newDiv.remove();
})
โ ๋์ ๋ฐฉ์
- ์นด๋ 1๊ฐ ์์ฑ → ์ญ์ ๋ฒํผ 1๊ฐ → ์ด๋ฒคํธ ํธ๋ค๋ฌ 1๊ฐ
- ์นด๋ 100๊ฐ ์์ฑ → ์ญ์ ๋ฒํผ 100๊ฐ → ์ด๋ฒคํธ ํธ๋ค๋ฌ 100๊ฐ
์ฆ, ์์ ๊ฐ์๋งํผ ์ด๋ฒคํธ๊ฐ ์ฆ๊ฐํ๋ค.
์ด ๋ฐฉ์์ ๋ฌธ์ ์ :
- ์นด๋ 100๊ฐ๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ 100๊ฐ ์๊น
- ์ฑ๋ฅ ๋จ์ด์ง๊ณ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง
- ๋์ ์ผ๋ก ์ถ๊ฐ๋ ์์๋ ์ฒ์์ ์ด๋ฒคํธ๊ฐ ์ ๋ถ์ด์์
๊ทธ๋์ ์ด๋ฒคํธ ์์์ ์ฌ์ฉํ๋ฉด ๋ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ ํ ์ ์์
2. ์ด๋ฒคํธ ์์ ๋ฐฉ์: ๋ถ๋ชจ์ ์ด๋ฒคํธ ํ ๋ฒ๋ง ๋ฑ๋ก
์ญ์ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์ญ์ ๋ฒํผ์ ๋ถ์ด์ง ์๊ณ
๋ถ๋ชจ ์์(cards) ํ๋์๋ง ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๋ค.
cards.addEventListener("click", function(e){
if (e.target.classList.contains("delete-btn")) {
e.target.parentElement.remove();
}
});
โ ๋์ ๋ฐฉ์
- ํด๋ฆญ๋ ์์๊ฐ .delete-btn์ธ์ง ์ฒดํฌ
- ๋ง์ผ๋ฉด ํด๋น ์นด๋ ์ญ์
- ์ญ์ ๋ฒํผ์ด 10๊ฐ๋ 100๊ฐ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ๋จ ํ๋
์ฅ์ :
- ์ฑ๋ฅ ์ข์ (ํธ๋ค๋ฌ 1๊ฐ)
- ๋์ ์ผ๋ก ์ถ๊ฐ๋ ์์๋ ์๋ ์ ์ฉ
- ์ฝ๋๊ฐ ๋จ์ํด์ง๊ณ ์ ์ง๋ณด์ ํธํจ
3. ์ค์ ์ ์ฉ ํฌ์ธํธ
- ๋ฆฌ์คํธ๋ ํ ์ด๋ธ์ฒ๋ผ ๋ฐ๋ณต๋๋ ์์๊ฐ ๋ง์ ๋ ํ์
- ๋ฒํผ, ๋ฉ๋ด, ์์ดํ ์ญ์ /ํ ๊ธ ๋ฑ์ ๋งค์ฐ ํจ๊ณผ์
- SPA, ๋์ UI์์ ๊ฑฐ์ ๊ธฐ๋ณธ ํจํด์ผ๋ก ์ฌ์ฉ๋จ
ํนํ Vue/React ๊ฐ์ ํ๋ ์์ํฌ๊ฐ ๋์ค๊ธฐ ์ ๋ถํฐ
jQuery ์์ ์๋ ๊ธฐ๋ณธ์ ์ธ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ์์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจํด์ด๋ค.
๋ง๋ฌด๋ฆฌ ์ ๋ฆฌ
์ด๋ฒคํธ ์์์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด:
“๋์ ์ผ๋ก ๋ณํ๋ UI๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ดํ๊ธฐ ์ํด, ์ด๋ฒคํธ๋ฅผ ๋ถ๋ชจ์๊ฒ ํ ๋ฒ๋ง ๋งก๊ธฐ๋ ๋ฐฉ์”
'๐ฅ๏ธ ํ๋ก ํธ์๋ > ๐กJS, React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| # JS - Array.from()์ฌ์ฉ, NodeList์ ๋ฐฐ์ด์ ์ฐจ์ด (0) | 2025.12.12 |
|---|---|
| # JS - debounce() ํจ์ ์์ ์ ๋ฆฌ (0) | 2025.12.10 |
| # ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์ ์ ์ธ ๋ฐฉ์๋ณ ํจ์ ์ค์ฝํ(function scope) ์ฐจ์ด์ ! (1) | 2025.11.10 |
| # jQuery๋ฅผ ํตํด Ajax ์์ฒญ ์ ์ ์ญ ๋ก๋ฉ์คํผ๋ ์ ์ด ๋ฐฉ๋ฒ (3) | 2025.10.23 |
| # Query์์ $.getJSON๊ณผ $.ajax ๋น๊ต ์ ๋ฆฌ (1) | 2025.09.22 |