Today I Learned #2

YoungToMaturityยท2020๋…„ 12์›” 29์ผ
1

Javascript

๋ชฉ๋ก ๋ณด๊ธฐ
2/17
post-thumbnail

Javascript๋กœ ๋กœ์ง ์ฒ˜๋ฆฌํ•˜๊ธฐ - element.classList()

const title = document.querySelector("#title");
const CLICKED_CLASS = "clicked";

querySelector๋ฅผ ํ†ตํ•˜์—ฌ id="title"์ธ element๋ฅผ title๋กœ์„œ ์„ ์–ธํ•ด์ค๋‹ˆ๋‹ค.

function handleClick() {
    const currentClass = title.className;
    if(currentClass !== CLICKED_CLASS){
        title.className = CLICKED_CLASS;
    } else {
        title.className = "";
    }
}

์ด ๋ฐฉ์‹์œผ๋กœ click์— ๋Œ€ํ•œ event๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ, ๊ธฐ์กด title์˜ className์ด ""์ด ์•„๋‹Œ ๊ฒฝ์šฐ (ex) btn) click์ด ๋ฐœ์ƒํ•˜๋ฉด btn์ด clicked๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋˜๊ณ  ๋‹ค์‹œ click์ด ๋ฐœ์ƒํ•˜๋ฉด className์ด btn์ด ์•„๋‹Œ ""๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.
btn์˜ ํŠน์„ฑ๋„ ์œ ์ง€ํ•˜๊ณ , click ์—ฌ๋ถ€๋ฅผ ๋ฐ˜์˜ํ•˜๊ณ  ๋‹ค์‹œ ํด๋ฆญํ•œ ๊ฒฝ์šฐ ์›๋ž˜์˜ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

MDN element.classList์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด, element.classList.contains(string)์„ ํ†ตํ•ด ํ•ด๋‹น element์˜ class์ค‘์— string์— ํ•ด๋‹นํ•˜๋Š” ์†์„ฑ์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๊ณ , element.classList.add(string)์„ ํ†ตํ•ด ๊ธฐ์กด์˜ class์— ํ•ด๋‹น string์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌด์‹œํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. element.classList.remove(string)์€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ string์œผ๋กœ์„œ ์ง€์ •๋œ ํด๋ž˜์Šค ๊ฐ’์„ ์ œ๊ฑฐํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

function handleClick() {
    const hasClass = title.classList.contains(CLICKED_CLASS);
    if (!hasClass) {
        title.classList.add(CLICKED_CLASS);
    } else {
        title.classList.remove(CLICKED_CLASS);
    }
}

์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด, hasClass๋ฅผ ์ด์šฉํ•˜์—ฌ title์˜ class์— "clicked"๊ฐ€ ํฌํ•จ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ contains๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜๊ณ , ๊ธฐ์กด์˜ class="btn"์ด์—ˆ๋˜ ๊ฒฝ์šฐ click์ด ๋ฐœ์ƒํ•˜๋ฉด class="btn clicked"๋กœ ์ถ”๊ฐ€๊ฐ€ ๋˜๋ฉฐ, btn์˜ ํŠน์„ฑ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค. click์ด ํ•œ๋ฒˆ ๋” ๋ฐœ์ƒํ•˜๋ฉด, class="btn"์œผ๋กœ ์ˆ˜์ •๋˜๋ฉฐ ์ฒ˜์Œ์˜ ํ˜•ํƒœ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค.

์•ž์„  MDN ๋ฌธ์„œ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฝ๋‹ค๋ณด๋ฉด, add(), remove()์™€ ๊ฐ™์ด toggle()์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด, ์œ„์˜ ์ฝ”๋“œ์™€ ์ •ํ™•ํžˆ ๊ฐ™์€ ๋กœ์ง์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ ํ›จ์”ฌ ๋” ๊น”๋”ํ•˜๊ณ  ์งง์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

function handleClick() {
    title.classList.toggle(CLICKED_CLASS);
}

์ด์ฒ˜๋Ÿผ, MDN์—๋Š” ์—†๋Š” ๊ฒƒ์ด ์—†๋‹ค.
์—ญ์„ค์ ์œผ๋กœ ์—†๋Š” ๊ฒƒ์ด ์—†์–ด์„œ ์ •ํ™•ํ•˜๊ฒŒ ์›ํ•˜๋Š” ๊ฒƒ์„ ์ฐพ๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ๋ฟ,,

profile
iOS Developer

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

comment-user-thumbnail
2020๋…„ 12์›” 29์ผ

์‘์›ํ•ฉ๋‹ˆ๋‹ค!๐Ÿ™Œ

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