
function add(a, b) {
return a + b;
}
// ํจ์ ํธ์ถ
console.log(add(5, 3));
๐ ํธ์ด์คํ ๊ฐ๋ฅ
const multiply = function(a, b) {
return a * b;
};
// ํจ์ ํธ์ถ
console.log(multiply(4, 2))
๐ ํธ์ด์คํ ๋ถ๊ฐ๋ฅ
const subtract = (a, b) => a - b;
// ํจ์ ํธ์ถ
console.log(subtract(7, 2));
๐ ๊ณตํต์ฝ๋
const name : 'ํ๊ธธ๋'
const age : 16
๐ ๊ธฐ๋ณธ์ฝ๋
const obj = {
name: name,
age: age
}
๐ ์ถ์ฝ์ฝ๋
const obj2 = {name,obj}
const print = (param) => {
const name = param.name
const age = param.age
console.log(name,age)
}
const obj2 = {name:'์ด์์ ',age:20}
print(obj2)
๐ ํจ์์์ฑ ๋ฐฉ๋ฒ3๊ฐ์ง์ค ํ์ดํ๋ฅผ ์ด์ฉํ ํจ์์์ฑ ๋ฐฉ๋ฒ
๐ print๋ผ๋ ํจ์๋ param์ด๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๊ฐ ๋ฐ๋๋ค
๐ obj2์ name๊ณผ age๊ฐ ํจ์๋ด๋ถ์ param.name, param.age๋ก ๋ค์ด๊ฐ์ name age์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
const print = ({name,age}) => {
console.log(name,age)
}
const obj2 = {name:'์ด์์ ',age:20}
print(obj2)
๐ param์ ๊ฐ์ ์์ ๊ณ ๋ค์ด๋ ํธ๋ก name,age๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ๋ฐฉ๋ฒ.
๐ ๊ตฌ์กฐ๋ถํดํ ๋น
//๊ฐ์ฒด๋ฆฌํฐ๋ด ์์ฑ
const person = {
name: '์ด์์ ',
age: 20,
city: '์์ธ'
};
// ๊ตฌ์กฐ ๋ถํด ํ ๋น
const { name, age } = person;
console.log(name); // ์ด์์
console.log(age); // 20
const calcaulator = {} // ๋น ๊ฐ์ฒด์์ฑ
calcaulator.add = (a,b) => a+b // add๋ฉ์๋๋ฅผ ๊ฐ์ฒด์ ์ถ๊ฐ
calcaulator.sub = (a,b) => a-b // sub๋ฉ์๋๋ฅผ ๊ฐ์ฒด์ ์ถ๊ฐ
const oper = prompt('JOB') // job์ด๋ผ๋ ๋ฌธ๊ตฌ์ ์
๋ ฅ์ฐฝ ์์ฑ
const a = parseInt(prompt('A')) // a๋ผ๋ ๋ฌธ๊ตฌ์ ์
๋ ฅ์ฐฝ ์์ฑํ์ฌ ์ซ์๋ก ๋ณ๊ฒฝ
const b = parseInt(prompt('B')) // b๋ผ๋ ๋ฌธ๊ตฌ์ ์
๋ ฅ์ฐฝ ์์ฑํ์ฌ ์ซ์๋ก ๋ณ๊ฒฝ
console.log(calcaulator[oper](a,b))
<h1 id="target">AAA</h1>
<script>
const target = document.querySelector('#target')
//๋ธ๋ผ์ฐ์ ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ์ํด์ ID๊ฐ์ target๋ก ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด
//document.querySelector๋ฅผ ์ฌ์ฉํ๋ค.
console.dir(target)
target.innerHTML = 'BBBB'
</script>
๐ querySelector๋ ๋จ์ผ์์๋ฅผ ๋ฐํํ๋ค
๐ h1์ target์ด๋ผ๋ ์ด๋ฆ์ id๋ฅผ ์ ํด์ฃผ๊ณ , scriptํ๊ทธ๋ด์ document.querySelector('#target')์ ์์ฑ.
๐ ์ด๋ id๋ฅผ target์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ๋ธ๋ผ์ฐ์ ๊ฐ์ฒด์ ๋ํ ์ ๋ณด๋ฅผ const target์ด๋ผ๋ ๋ณ์์ ๋ฃ๋๋ค.
๐ console.dir(target)์ ํด๋ณด๋ฉด h1#target ์ด๋ผ๋ ๊ฐ๊ณผ ์๋์ h1์ ๋ํ property๊ฐ ๋์จ๋ค.
๐ ์ฆ, h1์ ๋ด๋ถ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์๋ค๋ ๋ง. ๊ทธ๋ฌ๋ฉด ๋ด๋ถ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ์์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค๋๊ฒ์ธ๋ฐ, ๊ทธ๊ฒ์ด target.innerHTML = 'BBBB'์ด๋ค.
<h1 id="target">AAA</h1>
id: "target"
innerHTML: "AAA"
localName: "h1"
nodeName: "H1"
nodeType: 1
tagName: "H1"
...
<ul>
<li>1</li>
</ul>
<script>
const arr = document.querySelectorAll("li")
console.dir(arr)
</script>
๐ querySelectorAll์ ๋ฐฐ์ด์์๋ฅผ ๋ฐํํ๋ค.
๐ ๋ฐํ๊ฐ์ผ๋ก nodeList๋ฅผ ๋ฐํํ๋ค.
๐ ์ฐ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ป๊ฒ DOM(HTML ๊ตฌ์กฐ)์ด ๋ณ๊ฒฝ๋ ๊ฒ์ ์ ์ ์๋์ง ์์์ผํ๋ค.
<script>
const menuUL = document.querySelector('.menuUL')
console.log(menuUL)
const m1 = document.createElement('li')
m1.textContent = '์๋ฉ๋ฆฌ์นด๋
ธ'
menuUL.appendChild(m1)
</script>
๐ ํด๋น์ฝ๋๋ ul ํ๊ทธ๋ฅผ querySelector๋ฅผ ํตํด์ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ , createElement('li')๋ฅผ ํตํด์ ๋์ ์ผ๋ก li์ ์์๋ฅผ ์ถ๊ฐํ๋ ์ฝ๋์ด๋ค.
๐ ์ฌ๊ธฐ์ document.createElement ๋ฅผ ํตํด DOM์ด ์
๋ฐ์ดํธ ๋๋๋ฐ, ์ด๋ฌํ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ํตํด์ DOM์ด ์
๋ฐ์ดํธ๋์ด ๋ฆฌํ์ธํธ ์์
์ด ๋ฐ์ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ฆ์ ์ ๋ฌ๋๋ค.
๐ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง์ ๋ ์ด์์์ ๊ณ์ฐํ๋ ๊ณผ์
๐ ์์์ ์ถ๊ฐ, ์ญ์ , ํฌ๊ธฐ ๋ณ๊ฒฝ ๋ฑ์ผ๋ก ์ธํด ํ์ด์ง์ ๋ ์ด์์์ด ๋ณ๊ฒฝ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ฆฌํ๋ก์ฐ๋ฅผ ์ํ
๐ width, height, margin, padding, border ํด๋น ๋ด์ญ๋ค์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ถ๊ฐ๋ ๋ ๋ฐ์ํจ.
๐ ๋ฆฌํ์ธํธ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง์ ์๊ฐ์ ์ธ ๋ถ๋ถ์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์
๐ background-color, color ๋ฑ์ ์์๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ฐ์ํจ.
๐ ๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ๋ฅผ ์์ฃผ ์งํํ ์๋ก ์ง์ ๋ค ๊ทธ๋ ธ๋ค๋ฅผ ๋ฐ๋ณตํ๋๊ฒ ์ด๊ธฐ ๋๋ฌธ์ ํฌํผ๋จผ์ค๊ฐ ๋จ์ด์ง์ ๋ฐ์ ์๋ค.
<style>
.show{
display: block;
}
</style>
<div class="box b1 show">
<h1>๋ฉ๋ด</h1>
</div>
<script>
const target = document.querySelector('.b1')
setTimeout(()=> {
target.classList.toggle('show')
},2000)
</script>
๐ ์ฐ์ b1์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํด๋์ค์ ๋ํ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ target์ด๋ผ๋ ๋ณ์์ ๋ฃ๋๋ค.
๐ b1์ด๋ผ๋ ์ ๋ div ๊ฐ์ธ์ ธ์๋ ๋ฉ๋ด์.
๐ setTimeOut์ 2์ด๋ค์ ๋ด๋ถ์ ์๋ ํจ์๋ฅผ ์คํํ๊ฒ ๋ค ๋ผ๋ ๋ง.
๐ ๋ด๋ถ์ classList.toggle('show')๋ show๋ผ๋ ํด๋์ค๊ฐ ์๋ค๋ฉด ์ ๊ฑฐ, ์๋ค๋ฉด ์์ฑํด์ฃผ๋ ์ญํ ์.
๐ ์์ ๋ก classList.add('show')๋ ์ถ๊ฐํด์ฃผ๋์ญํ , classList.remove('show')๋ ์ ๊ฑฐํด์ฃผ๋ ์ญํ ์.
๐ ํ์ฌ b1์ show๋ผ๋ ๋ธ๋ญ์ ํํ๋ฅผ ๊ฐ์ง๋ ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, 2์ด๋ค์๋ showํด๋์ค๊ฐ ์์ด์ง๋ฉด์ ํํ๊ฐ ์ฌ๋ผ์ง๊ฒ๋๋ค. div class="box b1 show" ๐ div class="box b1"
<style>
.box{
border:1px solid black;
box-sizing: border-box;
height: 50vh;
width: 100vw;
display: none;
}
.b1{
background-color: orange;
}
.b2{
background-color: darkgreen;
}
.show{
display: block;
}
</style>
<div class="container">
<div class="menu">
<ul>
<li onclick="showMenu('b1')">๋ฉ๋ด</li>
<li onclick="showMenu('b2')">์ฅ๋ฐ๊ตฌ๋</li>
</ul>
</div>
<div class="box b1 show">
<h1>๋ฉ๋ด</h1>
</div>
<div class="box b2">
<h1>์ฅ๋ฐ๊ตฌ๋</h1>
</div>
</div>
<script>
const b1 = document.querySelector('.b1')
// b1ํด๋์ค์ ๋ํ ์ ๋ณด(div)๋ฅผ b1๋ณ์์ ํ ๋นํ๋ค.
// querySelector๋ฅผ ์์ฃผํ๋ฉด ํฌํผ๋จผ์ค๋ฅผ ๋ง์ด ๋จ์ดํธ๋ฆฌ๋ฏ๋ก ์์ฃผ ๊ฒ์ํ์ง ์๊ฒ ๋ณ์๋ก ๋นผ๋๊ธฐ.
const b2 = document.querySelector('.b2')
// b2ํด๋์ค์ ๋ํ ์ ๋ณด(div)๋ฅผ b2๋ณ์์ ํ ๋นํ๋ค.
const cart = []
// ๋ด์ฉ๋ฌผ์ ๋ด๋ ์นดํธ ๋ฐฐ์ด์์ฑ
function showMenu(target){ // target์ด๋ผ๋ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๊ณ b1||b2๊ฐ ๋ค์ด์ฌ ์์
document.querySelectorAll('.box').forEach(box =>{
// ๋ชจ๋ ๋ฐ์คํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผํ๊ธฐ ๋๋ฌธ์ all์ ์ฌ์ฉํ๋ค.
box.classList.remove('show')
// forEach๋ฌธ์ ํตํด ๋ชจ๋ box๋ค์ด ๊ฐ์ง๊ณ ์๋ ์ ๋ณด๋ฅผ ํ๋์ฉ ๋ณด๋ฉด์ show๋ผ๋ ํด๋์ค๋ฅผ ์ญ์ ํ๋ค.
})
document.querySelector(`.${target}`).classList.add('show')
// onclick์ ํ๋ฉด target์ ๋ํ ํด๋์ค๊ฐ ๋ค์ด์ค๋๊น ๊ทธ ํด๋์ค์๋ค๊ฐ show๋ฅผ ์ถ๊ฐํด์ค๋ค.
}
</script>
๐ ์ฝ๋์ ๋์์ ๋ชจ๋ box์ show๋ฅผ ๋ค ๊บผ๋๋ค์ html์์ onclick์ ํตํด ์ ํ๋ ํด๋์ค(b1 || b2)๊ฐ showMenu์ ํ๋ผ๋ฏธํฐ๊ฐ์ผ๋ก ๋ค์ด์์ ํด๋น ํด๋์ค์ show๋ฅผ ์ถ๊ฐํด์ฃผ๋ ๊ธฐ๋ฅ.
๐ querySelector๋ฅผ ์์ฃผํ๋ฉด ํฌํผ๋จผ์ค๋ฅผ ๋ง์ด ๋จ์ดํธ๋ฆฌ๋ฏ๋ก ์์ฃผ ๊ฒ์ํ์ง ์๊ฒ ๋ณ์๋ก ๋นผ๋๊ธฐ.
function makeMenu(){
let str = '<ul>' // ulํ๊ทธ๋ก ์์ํด์
for(let i = 0; i<10; i++){
str += `<li data-name="Menu${i}" data-pno="${i}" data-price="${i*1000}">Menu ${i}</li>`
// ๋ฐฑํฑ ์ฌ์ฉํด์ str์ ์ค์ฒฉ๋ ๋ฌธ์์ด์ ๋ง๋ค๊ธฐ
// ์ผ์ผ์ด ์๋์ผ๋ก ํด๋นํ๋ ๊ฐ๋ค์ ์ง์ด๋ฃ๋๊ฒ์ด ์๋
// ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ ์์ฑ์ผ๋ก data-xxx=""๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
}
str += '</ul>' // ulํ๊ทธ๋ก ์ข
๋ฃ๋๋ค.
b1.innerHTML = str // ์์์ ๋ง๋ค์ด๋์ str์ด๋ผ๋ ๋ฌธ์ฅ๋ค์ ๋์ ์ผ๋ก b1์ innerHTML์ ์ถ๊ฐํด์ฃผ๋๊ฒ.
}
makeMenu() // ๋ฉ๋ด ํธ์ถํด์ ์ถ๊ฐํ๊ธฐ
๐ b1(๋ฉ๋ด)์ 10๊ฐ์ง์ ๋ฉ๋ด๋ฅผ ์ถ๊ฐํ๋ ํจ์
b1.querySelector('ul').addEventListener('click',e=>{
// b1์ ๋ํ document๋ ์์ ์งํํ์ผ๋ ์ ์ธํ๊ณ
// ulํ๊ทธ์ ์ ๋ณด๋ฅผ ์ฐพ๊ณ , ํด๋ฆญ์ ํ๋ฉด ๋ด๋ถ ํจ์ ์คํ
const target = e.target
// ํด๋ฆญ๋ ์์๋ฅผ ๊ฐ์ ธ์จ๋ค.
const name = target.dataset.name
// data-name ์์ฑ ๊ฐ์ ๊ฐ์ ธ์ด
const pno = target.dataset.pno
const price = target.dataset.price
const obj = {name,pno,price}
//obj์ ์์ฑ๊ฐ๋ค์ ๋ฃ์ด obj๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑ
console.log(obj)
target.remove()
//ํด๋ฆญํ ์์๋ค์ ์ญ์ ํ๋๊ธฐ๋ฅ
cart.push(obj) // ์นดํธ์ ๋ด์ฉ๋ฌผ ๋ด๊ธฐ
showCart() // ํจ์ ์คํํด์ฃผ๊ธฐ
showMenu('b2') // ์นดํธ์ ๋ด์ฉ๋ฌผ์ ๋ด์ผ๋ฉด ์ฅ๋ฐ๊ตฌ๋ ์๋์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ
},false)
๐ ์ด๋ฒคํธ ์ฒ๋ฆฌํจ์๋ฅผ ์ฌ์ฉํด์ผํ๋ ์ด์
1. ๊ธฐ์กด์ html๋ด๋ถ์ <.li onclick>๊ณผ ๊ฐ์ด ์ฌ์ฉ์ ํ์๋๋ฐ, ์ด๋ฌํ ๋ฐฉ๋ฒ์ html์ ์์ํจ์ ํด์น๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์์์ผํจ.
2. onclick ๋๋ฌธ์ ํ๊ฐ์ง์ ํ๋๋ฐ์ ํ ์ ์์.
๐ ์ด๋ฒคํธ ์ฒ๋ฆฌํจ์์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ e(event)๊ฐ ๋ค์ด๊ฐ์ผํจ.
๐ ์ด๋ฒคํธ ์ฒ๋ฆฌํจ์์ ์์ฑ์์น๋ ์๋ฅผ๋ค์ด, b1ํด๋์ค์ ulํ๊ทธ์ ๋ํ ํด๋ฆญ์ฑ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ฉด, b1ํด๋์ค์ ulํ๊ทธ ์์ฑ ์ดํ ์๋์ ์ด๋ฒคํธ์ฒ๋ฆฌํจ์ ์ฝ๋๊ฐ ์์ฑ๋์ด์ผ ํ๋ค.
๐ ์ด๋ฒคํธ ์ฒ๋ฆฌํจ์์ค์ ์ด๋คํ๊ทธ๋ฅผ ์ฒ๋ฆฌํ ์ง ์ ํ(ul์ฒ๋ผ)ํ๋๋ฐ ํ๊ฐ์ง๋ง ์ ํํด์ผ ํฌํผ๋จผ์ค๊ฐ ๋จ์ด์ง์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ul ์๋ liํ๊ทธ๊ฐ ์๋๊ฒ ์ฒ๋ผ li๊ฐ๊ฐ์ ์ด๋ฒคํธ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ํฌํผ๋จผ์ค๊ฐ ๋จ์ด์ง๋ฏ๋ก ulํ๊ทธ ์ฒ๋ผ ํ๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ํ๋๊ฒ์ ๊ถ์ฅํ๋ค.
๐ ulํ๊ทธ๋ก ์ด๋ฒคํธ์ฒ๋ฆฌํจ์๋ฅผ ์ ํํ๋๋ผ๋ ์ค์ ๋ก liํ๊ทธ๋ฅผ ๋๋ ์๋ target์ผ๋ก ์ค์ ์ด๋๋ค. ์ด๋ ๋งจ์ฒ์ selector์ ๊ฐ์ด ํ๊ฒ์ด ์๋๋ผ, ์ง์ง ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋๊ฒ์ด ํ์ผ์ด๋ค.
function showCart(){ // cart๋ฐฐ์ด์์ ์๋ ์์๋ค์ liํ๊ทธ๋ก ๋ด๋ณด๋ด๋๊ฒ
let str = '<ul>'
str += cart.map(({pno,name,price}) =>
`<li>${pno} -- ${name} -- ${price}</li>`).join('')
// item ํ๋ํ๋๊ฐ liํ๊ทธ๊ฐ ๋์ด์ผํ๊ณ , ๋ฌธ์์ด ํ๋๊ฐ ๋์ด ul์ ๋ค์ด๊ฐ์ผํจ.
// join์ ํตํด ๋ฌธ์์ด ํ๋๋ก ๊ฒฐํฉ
// ํ์ง๋ง ์ฌ๊ธฐ์๋ item์ ์ฌ์ฉํ์ง ์๊ณ ๋ค์ด๋ ํธ๋ก ํ๋ผ๋ฏธํฐ๊ฐ ๋ฐ์
str += '<li><button class="clearBtn">CLEAR</button></li>'
str += '</ul>'
b2.innerHTML = str
}
๐ b1์์ cart์ ๋ด์๋ ์์๋ค์ b2์์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ
b2.addEventListener('click', e=>{ // ์ญ์ ๋ฒํผ ์ด๋ฒคํธ ์ฒ๋ฆฌํจ์, b2์ ๊ฑธ์ด๋์ ์ด์ ๋
// ๋งจ ์ฒ์์๋ clear๋ฒํผ์ด ์์ฑ๋์ด์์ง ์๊ธฐ ๋๋ฌธ์ b2์ ๊ฑธ์ด๋์
const target = e.target
if(target.classList.contains('clearBtn')){ // b2์์ clearBtn์ด ์๋ค๋ฉด ์๋ ๊ธฐ๋ฅ์ด ์๋
cart.length=0 // ๋ฐฐ์ด์ ๋ด์ฉ์ ๋ค ์์ ๋ฒ๋ ค์ ์ง์
showCart() // ์ง์์ง๊ฑฐ ๋ณด์ฌ์ฃผ๊ธฐ
}
},false)
๐ ๋ฒ๋ธ๋ง์ inner์ ๋ฐ์ค์์ outer์ ๋ฐ์ค๋ก ๋๊ฐ๋๋ฐฉํฅ
๐ ์บก์ณ๋ง์ outer์ ๋ฐ์ค์์ inner์ ๋ฐ์ค๋ก ๋ค์ด๊ฐ๋๋ฐฉํฅ
๐ stopPropagation๋ ํด๋น ์ฝ๋์ ๋์์ ๋ง๋๊ฒ
๐ preventDefault๋ ํด๋น ์ด๋ฒคํธ๊ฐ ์์์ ๋ถ๋ชจํด๋์ค๋ก ์ ํ๋๋๊ฒ์ ๋ง๋๊ฒ
<a class ="link" href="domEx.html">domEx</a>
<script>
document.querySelector('.link').addEventListener('click', e=>{
e.stopPropagation() // ์ด๋ฒคํธ ์ ํ๋ง๊ธฐ
e.preventDefault() // ์ด๋ฒคํธ ๋์๋ง๊ธฐ
console.log("link")
})
</script>
๐ ํด๋น์ฝ๋๋ aํ๊ทธ์ ๋์์ ๋ง๊ธฐ ์ํ ์ฝ๋์ธ๋ฐ, aํ๊ทธ๋ ์ด๋ฒคํธ์ฒ๋ฆฌํจ์๊ฐ ์์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌํจ์์ ๊ธฐ๋ฅ์ด ๋ดํฌ๋์ด์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋๊ฒ์ด๋ค.
๐ aํ๊ทธ๋ฅผ ์ ํํ๊ฒ ๋๋ฉด ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ก ์ด๋ํ๊ฒ ๋๋๋ฐ, preventDefault๋ฅผ ํตํด์ aํ๊ทธ์ ์ด๋ฒคํธ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๋ง์๋ฒ๋ ค ์๋ํ์ง ์๊ฒ ๋๋ค.
๐ stopPropagation / preventDefault ๋๊ฐ์ง๋ ๊ฑฐ์ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
๐ ํ์ฌ ๊ฐ๋ฐํ๊ณ ์๋ SPA์์๋ ํ๋์ ํ์ด์ง์์ ์งํ๋์ด์ผ ํ๋๊น Aํ๊ทธ๋ฅผ ์ ๋ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Aํ๊ทธ ๋์ Router๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
๐ Router : ์ด๋๊น์ง ๋ง๋ค์๋, ๋ฉ๋ด๋ฅผ ๋๋ฅด๋ฉด ๋ฉ๋ด ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋๋ฅด๋ฉด ์ฅ๋ฐ๊ตฌ๋๊ฐ ๋์ค๋๊ฒ
<div class="outer">
<div class="inner">
</div>
</div>
document.querySelector('.inner').addEventListener('click', function(e){
e.stopPropagation() //๋ธ๋ผ์ฐ์ ์์ ํด๋ฆญ์ ํ๋๋ผ๋ outer์ธ ๋ถ๋ชจ์์์ ๋๋ฌ๋์ง ์๋๋ค.
console.log('inner')
},false) // false๋ฅผ ์ค์ผ ์บก์ณ๋ง์ ํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ๊ฐ ํฌํจ๋จ.
document.querySelector('.outer').addEventListener('click', function(e){
console.log('outer')
},false)
๐ div outer ๋ด๋ถ์ inner๊ฐ ์๋ ํํ๋ก ๋์ด์์ผ๋ฉด ๋ฒ๋ธ๋ง ๋๋ฌธ์ inner๋ฅผ ์ ํํ์๋ inner ์ ํ ์ดํ outerํด๋์ค๋ ์๋์ผ๋ก ์ ํ๋๋ค.
๐ ๊ทธ๋ ๊ฒ ๋๋ฉด ์ด๋ฒคํธ๋ฅผ inner์ ๊ฑธ์์๋ outer๋ํ ์ฒ๋ฆฌ๊ฐ ๋๋ฏ๋ก ๋ถ๋ชจํด๋์ค์ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ stopPropagation๋ฅผ ์ฌ์ฉํ๋ค.
๐ addEventListener์ false๋ ์บก์ณ๋ง์ ํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ๊ฐ ๋ดํฌ๋์ด์์ผ๋ฏ๋ก false๋ฅผ ์ ๋๊ฒ์ ๊ถ์ฅํ๋ค.