
๐ ๊ฒ์ ํจ๊ณผ : find()๋ฅผ ์ด์ฉํ์ฌ ์์ฑ์ ๊ฒ์ํ๊ธฐ
์ด๋ฒ ์๊ฐ์๋ find๋ฅผ ํตํด ์์ฑ์ ๊ฒ์ํ ๊ฒฝ์ฐ ํด๋น ์์ฑ ์ค๋ช
์ด ๋ํ๋๋ ํจ๊ณผ๋ฅผ ์ค์ตํด๋ณด๊ฒ ์ต๋๋ค
+ ์ถ๊ฐ๋ก ์์ฑ ๋ฒํผ์ ํด๋ฆญํ ๊ฒฝ์ฐ์๋ ํด๋น ์์ฑ์ ์ค๋ช
์ด ๋ํ๋๋๋ก ์์
ํด๋ณด๊ฒ ์ต๋๋ค! ๐ฅฒ
#1. HTML / CSS ์ค์ ํ๊ธฐ
! HTML TIP !
input์ ํ
์คํธ ํ์
์ ํ
์คํธ๋ฅผ ์
๋ ฅํ ์ ์๋ ์์๊ฐ ์์ฑ๋ฉ๋๋ค. ๋ํ input์ placeholder ์์ฑ์ ์์์์ ์ฌ์ฉ์์๊ฒ ์
๋ ฅ ์ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์ด๋๋ก ํด์ค๋๋ค.
โ๏ธ HTML ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
<main id="main">
<div class="search__wrap">
<span>find()๋ฅผ ์ด์ฉํ์ฌ ์์ฑ์ ๊ฒ์ํ๋ฉด ์ค๋ช
๋ณด์ฌ์ฃผ๊ธฐ</span>
<h1>CSS ์์ฑ ๊ฒ์ํ๊ธฐ</h1>
<div class="search__box">
<label for="search">๊ฒ์ํ๊ธฐ</label>
<input type="text" id="search" placeholder="CSS ์์ฑ ๋ฐ ์ ํ์ ์
๋ ฅํด์ฃผ์ธ์!">
</div>
<div class="search__desc">
<div class="desc">์์ฑ์ ๊ฒ์ํ์๋ฉด ์ค๋ช
์ด ๋ํ๋ฉ๋๋ค.</div>
</div>
<div class="search__info">
<div>CSS ์ ์ฒด ์์ฑ : <span class="num">0</span></div>
</div>
<div class="search__list">
</div>
</div>
</main>
! CSS TIP !
์ด์ ๊ฒ์ ์ดํํธ์ ์คํ์ผ์ด ๋์ผํ๋ฉฐ html ๊ตฌ์กฐ์ ์ถ๊ฐ๋ search__desc ์์์ ์คํ์ผ์ ์ถ๊ฐํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
background-image: url()์ ํตํด ์์ ์์ ์์ด์ฝ์ ๋ฃ์ด ์ค๋๋ค.
โ๏ธ CSS ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
.search__desc {
border: 2px solid var(--htmlColor);
padding: 20px 40px 20px 60px;
margin-bottom: 50px;
border-radius: 50px;
display: inline-block;
background-color: var(--htmlColor);
color: #fff;
background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='11' cy='11' r='8' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.5 16.958L21.5 21.958' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: 22px 17px;
}
#2. JAVASCRIPT : ์คํฌ๋ฆฝํธ
์ด๋ฒ ์คํฌ๋ฆฝํธ์์๋ map() ๋ฉ์๋์ find() ๋ฉ์๋, ๊ทธ๋ฆฌ๊ณ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์์
ํด๋ณด๊ฒ ์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ์๋์ ์คํฌ๋ฆฝํธ ์ฃผ์๊ณผ ํจ๊ป ์ดํด๋ณด๊ฒ ์ต๋๋ค!
! JAVASCRIPT TIP !
1. ๋ณ์๋ช
.map((element, index) => {}) : ๋ณ์์ ์ธ๋ฑ์ค ๊ฐ(์๋ฆฟ๊ฐ)์ ๋ถ๋ฌ์ต๋๋ค. ๋ณดํต ๋ณ์๊ฐ ๋ฐฐ์ด๋ก ์ ์ฅ๋์ด ์์ ๋ ์ฌ์ฉํฉ๋๋ค.
2. ๋ณ์๋ช
.find((element) => element ์กฐ๊ฑด์) : ๋ณ์์์ ํด๋น ์กฐ๊ฑด์ ํด๋นํ๋ ์์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
2. return : ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ ๋ฟ๋ง ์๋๋ผ ์ข
๋ฃ์ ์๋ฏธ๋ก๋ ์ฐ์
๋๋ค.
//01 ๋ฐ์ดํฐ ๊ฐ์ฒดํ ์ํค๊ธฐ
const cssProperty = [
{ name: "accent-color", desc: "ํน์ ์์์ ์์์ ์ง์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค." },
{ name: "align-content", desc: "์ฝํ
์ธ ์์ดํ
์ ์ํ๊ด๊ณ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค." },
{ name: "align-items", desc: "์ฝํ
์ธ ์์ดํ
์ ๋ด๋ถ ์ํ๊ด๊ณ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค." },
{ name: "align-self", desc: "๊ฐ๋ณ์ ์ธ ์ฝํ
์ธ ์์ดํ
์ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค." },
{ name: "all", desc: "์์์ ์์ฑ์ ์ด๊ธฐํ ๋๋ ์์์ ์ค์ ํฉ๋๋ค." },
{ name: "animation", desc: "์ ๋๋ฉ์ด์
๊ณผ ๊ด๋ จ๋ ์์ฑ์ ์ผ๊ด์ ์ผ๋ก ์ค์ ํฉ๋๋ค." },
{ name: "animation-delay", desc: "์ ๋๋ฉ์ด์
์ง์ฐ ์๊ฐ์ ์ค์ ํฉ๋๋ค." },
{ name: "animation-direction", desc: "์ ๋๋ฉ์ด์
์์ง์ ๋ฐฉํฅ์ ์ค์ ํฉ๋๋ค." },
.
.
.
{ name: "z-index", desc: "์์๋ค์ ์์ง ์์น๋ฅผ ์ค์ ํฉ๋๋ค." },
];
const searchList = document.querySelector(".search__list");
const searchNum = document.querySelector(".search__info .num");
const searchBox = document.querySelector(".search__box input");
const searchDesc = document.querySelector(".search__desc");
//02 ์ถ๋ ฅํ๊ธฐ : ๋ฐฐ์ด map()๋ฉ์๋
//map์ ํตํด ์ ํ์์๊ฒ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ฅํ์ฌ ๋ถ๋ฌ์ต๋๋ค.
//element๋ cssProperty์ ๊ฐ์ฒด, index๋ ๋ฐฐ์ด์์์ ์๋ฆฟ๊ฐ!
cssProperty.map((element, index) => {
// searchNum.innerText = index + 1;
searchNum.innerText = cssProperty.length + "๊ฐ";
// searchList.innerHTML += `<span>${element.name} : ${element.desc}</span>`;
//name์ด๋ผ๋ key์ ๊ฐ์ searchList์ ๋ถ๋ฌ์จ๋ค.
searchList.innerHTML += `<span>${element.name}</span>`;
});
//03 ์
๋ ฅํ๊ธฐ
//searchWord(๋ณ์)์ ์ฌ์ฉ์ ์
๋ ฅ๊ฐ์ ์ ์ฅํ ๋ค ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํ์ฌ findPropertyํจ์์ ๊ฐ์ ์ ๋ฌํฉ๋๋ค.
searchBox.addEventListener("keyup", () => {
const searchWord = searchBox.value;
// console.log(searchWord);
findProperty(searchWord);
});
//ํจ์ ๋ฐ์ ์์นํ์ผ๋ฏ๋ก ์ง์ญ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ ๋งค๊ฐ๋ณ์ ์ฌ์ฉํ์ฌ ์ ๋ฌ์ํค๊ฑฐ๋ ์ ์ญ๋ณ์๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ. ํ์ฌ๋ ๋งค๊ฐ๋ณ์์ฌ์ฉ!
//04 ์์ฑ์ฐพ๊ธฐ
//์์ ๋งค๊ฐ๋ณ์ searchWord๋ฅผ ํจ์์ searchWord2 ๋ณ์์ ์ ์ฅํฉ๋๋ค.
function findProperty(searchWord2){
//find๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ค์๊ฐ๊ณผ searchWord(์ฌ์ฉ์ ์
๋ ฅ ๊ฐ)์ด ๊ฐ์ ๊ฒฝ์ฐ tagetData์ ์ ์ฅํ ๋ค ํด๋น ๋ฐ์ดํฐ์ desc๊ฐ์ ์ฐพ์์ ๋ถ๋ฌ์ต๋๋ค.
//(data = element(cssProperty์ ๋ฐ์ดํฐ๊ฐ))
const tagetData = cssProperty.find((data) => data.name === searchWord2);
//๋ง์ฝ ์
๋ ฅ๊ฐ์ด ์์ ๊ฒฝ์ฐ(null)์๋ textContent๋ฅผ ํตํด ์ง์ ๋ฌธ๊ตฌ๊ฐ ๋จ๋๋กํฉ๋๋ค.
if(tagetData == null){
searchDesc.textContent = "ํด๋น ์์ฑ์ ์กด์ฌํ์ง ์์ต๋๋ค. ๋ค์ ๊ฒ์ํด์ฃผ์ธ์!";
//์๋์ textcontent๊ฐ ๋ฌด์กฐ๊ฑด ์คํ๋๋ฏ๋ก ๊ฐ์ด ์๋๋ฐ๋ ๊ณ์ ์ฐพ์ผ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋๋ ๊ฒ! ๋๋ฌธ์ ๋ฆฌํด์ ์จ์ ์ข
๋ฃ๋ฅผ ์์ผ์ฃผ๋ฉด ๋ฒ๊ทธ๋ฅผ ๊ณ ์น ์ ์๋ค.
return; //๋ฆฌํด์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ ๋ฟ๋ง ์๋๋ผ ์ข
๋ฃ์ ์๋ฏธ๋ก๋ ์ฐ์ธ๋ค.
}
searchDesc.textContent = tagetData.desc;
};
//05 ํด๋ฆญํ์ ๋ ์์ฑ ๋ณด์ด๊ธฐ(๋ฐ๋ณต๋ฌธ์ ์์น 03๋ฒ ์ฐธ๊ณ )
//๋จผ์ ๋ฒํผ์ ๋ชจ๋ ์ ํํด์ค ๋ค forEach๋ฌธ์ ํตํด ์์๋ฅผ ํด๋ฆญํ์ ์ ํด๋ฆญํ ์์๋ฅผ searchBtn์ ์ ์ฅ.
//๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํจ์์๊ฒ searchBtn๊ฐ ์ ๋ฌ
const search = document.querySelectorAll(".search__list span");
search.forEach((el) => {
el.addEventListener("click", ()=> {
const searchBtn = el.innerText;
findProperty(searchBtn);
});
});
#3. ๊ฒฐ๊ณผ
'EFFECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[EFFECT] ๊ฒ์ ํจ๊ณผ 05 : filter()๋ฉ์๋๋ฅผ ํตํด ์ค์๋ ์์ผ๋ก ๊ฒ์ํ๊ธฐ (3) | 2022.09.30 |
---|---|
[EFFECT] ํ๋ด๋ ์ค ํจ๊ณผ06 : ํ ์คํธ ํจ๊ณผ (2) | 2022.09.30 |
[EFFECT] ๋ง์ฐ์ค ํจ๊ณผ 05 : ๊ธฐ์ธ๊ธฐ ํจ๊ณผ / ๊ธ์จ ๋ฐ์ ํจ๊ณผ (2) | 2022.09.29 |
[EFFECT] ๋ง์ฐ์ค ํจ๊ณผ 04 : ์ด๋ฏธ์ง ํจ๊ณผ (3) | 2022.09.23 |
[EFFECT] ๋ง์ฐ์ค ํจ๊ณผ 03 : ์กฐ๋ช ํจ๊ณผ (2) | 2022.09.23 |
๋๊ธ