๐Ÿ“™๋…ธ๋งˆ๋“œ์ฝ”๋” Vanilla JS ๊ธฐ์ดˆ ์ •๋ฆฌ2

์†Œ์—ฐยท2021๋…„ 7์›” 2์ผ
0

vanillaJS

๋ชฉ๋ก ๋ณด๊ธฐ
4/8

const์™€ let

const h1 = document.querySelector("div.hello:first-child h1");
h1.innerText = "Click ME!";

function handleTitleClick(){
    const currentColor = h1.style.color;
    let newColor;

    if(currentColor === "blue") {
        newColor = "tomato";
    } else {
        newColor = "blue";
    }
     h1.style.color = newColor;

}

h1.addEventListener("click", handleTitleClick);

let newColor; ๋ผ๋Š” ๋นˆ ๋ณ€์ˆ˜๋ฅผ ์ค€ ์ด์œ : const๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ currentColor๋ฅผ ์ •์˜ํ•˜๋ฉด ๊ฐ’์„
๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— let์œผ๋กœ ๋นˆ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์คŒ.
์ดํ›„์— newColor = "tomato";๊ฐ€ ์‹ค์ œ๋กœ ์‹คํ–‰์€ ๋˜์—ˆ์œผ๋‚˜ newColor๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ •์˜๋˜์–ด์žˆ์ง€ ์•Š์•„ ๋ˆˆ์— ๋ณด์ด๋Š” ์ƒ‰์ƒ์ด ๋ณ€ํ•˜์ง€ ์•Š์Œ.
๋”ฐ๋ผ์„œ h1.style.color = newColor;๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
๋ฐ˜๋Œ€๋กœ newColor = h1.style.color; ๋Š” ์™œ ์•ˆ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Œ
๊ทธ๋Ÿฌ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ css๋ฅผ ์ฝ”๋“œ๋กœ ์ง์ ‘ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋ณ„๋กœ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹˜



class๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ JS์—์„œ ๋™์ž‘ํ•˜๊ธฐ

const h1 = document.querySelector("div.hello:first-child h1");

function handleTitleClick(){
    const activeClass = "active"
    if(h1.className === activeClass) {
        h1.className = "";
    } else {
        h1.className = activeClass;
    }
}

addEventListener("click", handleTitleClick);

์‹คํ–‰์€ ์ž˜ ๋˜๋‚˜ ๋ฒ„๊ทธ๊ฐ€ ํ•˜๋‚˜ ์กด์žฌํ•จ
๋งŒ์•ฝ h1์— "active" ์ด์™ธ์— ์ด๋ฏธ ์กด์žฌํ–ˆ๋˜ ํฐํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” class๊ฐ€ ์žˆ๋‹ค๋ฉด,
click์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํฐํŠธ class๋ฅผ ์—†์• ๋ฒ„๋ฆผ.

์ฆ‰, ๋ช…๋ น์–ด๋Œ€๋กœ๋งŒ class๋ฅผ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€ ๋ชจ๋“  class๋Š” ์—†๋Š” ์กด์žฌ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค..


๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด,,

const h1 = document.querySelector("div.hello:first-child h1");

function handleTitleClick() {
	const activeClass = "active";
	if (h1.classList.contains(activeClass)) {
		h1.classList.remove(activeClass);
	} else {
		h1.classList.add(activeClass);
	}
}

h1.addEventListener("click", handleTitleClick);

className์ด ์•„๋‹Œ classList๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์œ„ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

h1.classList.contains(activeClass) -----> h1.classList์— activeClass๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด,
h1.classList.remove(activeClass); -----> h1.classList์— activeClass๋ฅผ ์ œ๊ฑฐํ•ด๋ผ.

else {
h1.classList.add(activeClass);
}
-----> ๋งŒ์•ฝ,h1.classList์— activeClass๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด h1.classList์— activeClass๋ฅผ ์ถ”๊ฐ€ํ•ด๋ผ.
๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฝ”๋“œ๋„ toggle์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค„์ผ ์ˆ˜ ์žˆ์Œ


์ตœ์ข… ์ฝ”๋“œ

const h1 = document.querySelector("div.hello:first-child h1");
function handleTitleClick() {
	
    h1.classList.toggle("active");
}
h1.addEventListener("click", handleTitleClick);

toggle์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ค„์ž„. (if๋ฌธ๋„ ์‚ฌ์šฉx)
const activeClass ="active"; ์˜ ๋ณ€์ˆ˜๋„ ์—†์• ๋ฒ„๋ฆผ.(์™œ๋ƒ๋ฉด "active"๋ฅผ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๋‹ˆ๊น ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Œ.)

profile
์ฝ”๋ฆฐ์ด๐Ÿคช

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

comment-user-thumbnail
2023๋…„ 12์›” 7์ผ

div.hello:first-child h1
-> div.hello :first-child

querySelector ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋งˆ๋“œ์ฝ”๋”์—์„œ ์ž˜๋ชป์•Œ๋žด์คŒ..

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ