8.13(ํ™”)

0. ํ•จ์ˆ˜์ƒ์„ฑ3๊ฐ€์ง€

0-1. ํ•จ์ˆ˜์„ ์–ธ์‹

function add(a, b) {
    return a + b;
}

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(add(5, 3));

๐Ÿ‘‰ ํ˜ธ์ด์ŠคํŒ… ๊ฐ€๋Šฅ


0-2. ํ•จ์ˆ˜ํ‘œํ˜„์‹

const multiply = function(a, b) {
    return a * b;
};

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(multiply(4, 2))

๐Ÿ‘‰ ํ˜ธ์ด์ŠคํŒ… ๋ถˆ๊ฐ€๋Šฅ


0-3. ํ™”์‚ดํ‘œํ•จ์ˆ˜ ํ‘œํ˜„์‹

const subtract = (a, b) => a - b;

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(subtract(7, 2)); 



1. ์ถ•์•ฝํ˜• ํ‘œํ˜„

๐Ÿ“Œ ๊ณตํ†ต์ฝ”๋“œ

const name : 'ํ™๊ธธ๋™'
const age : 16

๐Ÿ“Œ ๊ธฐ๋ณธ์ฝ”๋“œ

const obj = {
name: name,
age: age
}

๐Ÿ“Œ ์ถ•์•ฝ์ฝ”๋“œ

const obj2 = {name,obj}




2. ํ™”์‚ดํ‘œ(๋žŒ๋‹ค)ํ•จ์ˆ˜์ƒ์„ฑ / ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น

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๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•.
๐Ÿ‘‰ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น




3. ๊ฐ์ฒด๋ฆฌํ„ฐ๋Ÿด์ด๋ž€

//๊ฐ์ฒด๋ฆฌํ„ฐ๋Ÿด ์ƒ์„ฑ
const person = {
    name: '์ด์ˆœ์‹ ',
    age: 20,
    city: '์„œ์šธ'
};

// ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
const { name, age } = person;

console.log(name); // ์ด์ˆœ์‹ 
console.log(age);  // 20




4. ๋™์ ํ”„๋กœํผํ‹ฐ ๊ณ„์‚ฐ๊ธฐ

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))




5. querySelector / querySelectorAll

5-1. querySelector

<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'์ด๋‹ค.


5-2. h1์˜ ๋‚ด๋ถ€๊ตฌ์กฐ

<h1 id="target">AAA</h1>
    id: "target"
    innerHTML: "AAA"
    localName: "h1"
    nodeName: "H1"
    nodeType: 1
    tagName: "H1"
    ...

5-3. querySelectorAll

<ul>
    <li>1</li>
</ul>
<script>
    const arr = document.querySelectorAll("li")
    
    console.dir(arr)

</script>

๐Ÿ‘‰ querySelectorAll์€ ๋ฐฐ์—ด์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
๐Ÿ‘‰ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ nodeList๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.




6. ๋ฆฌํ”Œ๋กœ์šฐ / ๋ฆฌํŽ˜์ธํŠธ

๐Ÿ“Œ ์šฐ์„  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ด๋–ป๊ฒŒ 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์ด ์—…๋ฐ์ดํŠธ๋˜์–ด ๋ฆฌํŽ˜์ธํŠธ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์ฆ‰์‹œ ์ „๋‹ฌ๋œ๋‹ค.

6-1. ๋ฆฌํ”Œ๋กœ์šฐ

๐Ÿ‘‰ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •
๐Ÿ‘‰ ์š”์†Œ์˜ ์ถ”๊ฐ€, ์‚ญ์ œ, ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋“ฑ์œผ๋กœ ์ธํ•ด ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฆฌํ”Œ๋กœ์šฐ๋ฅผ ์ˆ˜ํ–‰
๐Ÿ‘‰ width, height, margin, padding, border ํ•ด๋‹น ๋‚ด์—ญ๋“ค์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋ ๋•Œ ๋ฐœ์ƒํ•จ.

6-2. ๋ฆฌํŽ˜์ธํŠธ

๐Ÿ‘‰ ๋ฆฌํŽ˜์ธํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€์˜ ์‹œ๊ฐ์ ์ธ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •
๐Ÿ‘‰ background-color, color ๋“ฑ์˜ ์ƒ‰์ƒ๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฐœ์ƒํ•จ.

๐Ÿ“Œ ๋ฆฌํ”Œ๋กœ์šฐ ๋ฐ ๋ฆฌํŽ˜์ธํŠธ๋ฅผ ์ž์ฃผ ์ง„ํ–‰ํ• ์ˆ˜๋ก ์ง€์› ๋‹ค ๊ทธ๋ ธ๋‹ค๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š”๊ฒƒ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌํผ๋จผ์Šค๊ฐ€ ๋–จ์–ด์งˆ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.




7. classList.toggle


	<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"




8. SinglePageApplication(SPA) ํ‚ค์˜ค์Šคํฌ ์˜ˆ์ œ

8-1. style,html ํƒœ๊ทธ

<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>




8-2. showMenu

<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๋ฅผ ์ž์ฃผํ•˜๋ฉด ํฌํผ๋จผ์Šค๋ฅผ ๋งŽ์ด ๋–จ์–ดํŠธ๋ฆฌ๋ฏ€๋กœ ์ž์ฃผ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š๊ฒŒ ๋ณ€์ˆ˜๋กœ ๋นผ๋†“๊ธฐ.




8-3. makeMenu

 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๊ฐ€์ง€์˜ ๋ฉ”๋‰ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜




8-4. b1์˜ ul ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•จ์ˆ˜

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์˜ ๊ฐ’์ด ํƒ€๊ฒŸ์ด ์•„๋‹ˆ๋ผ, ์ง„์งœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š”๊ฒƒ์ด ํƒ€์ผ“์ด๋‹ค.




8-5. showCart

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์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ




8-6. b2์˜ ์‚ญ์ œ๋ฒ„ํŠผ ์ด๋ฒคํŠธ์ฒ˜๋ฆฌํ•จ์ˆ˜

 b2.addEventListener('click', e=>{ // ์‚ญ์ œ๋ฒ„ํŠผ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•จ์ˆ˜, b2์— ๊ฑธ์–ด๋†“์€ ์ด์œ ๋Š” 
   								  // ๋งจ ์ฒ˜์Œ์—๋Š” clear๋ฒ„ํŠผ์ด ์ƒ์„ฑ๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— b2์— ๊ฑธ์–ด๋†“์Œ
        const target = e.target
        if(target.classList.contains('clearBtn')){ // b2์—์„œ clearBtn์ด ์žˆ๋‹ค๋ฉด ์•„๋ž˜ ๊ธฐ๋Šฅ์ด ์ž‘๋™
            cart.length=0 // ๋ฐฐ์—ด์˜ ๋‚ด์šฉ์„ ๋‹ค ์—†์• ๋ฒ„๋ ค์„œ ์ง€์›€
            showCart() // ์ง€์›Œ์ง„๊ฑฐ ๋ณด์—ฌ์ฃผ๊ธฐ
        }
    },false)




9.bubbling / capturing

๐Ÿ‘‰ ๋ฒ„๋ธ”๋ง์€ inner์˜ ๋ฐ•์Šค์—์„œ outer์˜ ๋ฐ•์Šค๋กœ ๋‚˜๊ฐ€๋Š”๋ฐฉํ–ฅ
๐Ÿ‘‰ ์บก์ณ๋ง์€ outer์˜ ๋ฐ•์Šค์—์„œ inner์˜ ๋ฐ•์Šค๋กœ ๋“ค์–ด๊ฐ€๋Š”๋ฐฉํ–ฅ




10. stopPropagation / preventDefault

๐Ÿ‘‰ stopPropagation๋Š” ํ•ด๋‹น ์ฝ”๋“œ์˜ ๋™์ž‘์„ ๋ง‰๋Š”๊ฒƒ
๐Ÿ‘‰ preventDefault๋Š” ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„์˜ ๋ถ€๋ชจํด๋ž˜์Šค๋กœ ์ „ํŒŒ๋˜๋Š”๊ฒƒ์„ ๋ง‰๋Š”๊ฒƒ




10-1 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 : ์ด๋•Œ๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋˜, ๋ฉ”๋‰ด๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฉ”๋‰ด ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์žฅ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ๋‚˜์˜ค๋Š”๊ฒƒ




10-2. stopPropagation ์˜ˆ์‹œ

<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๋ฅผ ์ ๋Š”๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€